Şimdiye kadar yazdığımız her programda bir sorun vardı: Program kapanınca her şey unutuluyordu. Sayı tahmin oyununda en iyi skorunu, alışveriş listende yazdığın ürünleri, hesapladığın notları… Hepsi değişkenlerde duruyordu ve değişkenler program bitince kaybolur.
Bir şeyi kalıcı olarak saklamanın en basit yolu onu bir dosyaya yazmak. Bu derste dosya açmayı, yazmayı, okumayı ve veri analizinde en sık göreceğin CSV dosyalarını öğreniyoruz. Sonunda da kapatıp açınca bile unutmayan bir alışveriş listesi yazıyoruz.
Tüm kodlar Colab’da, tek tıkla açılıyor: Colab’da aç
Colab’da oluşturduğun dosyaları sol taraftaki klasör simgesine tıklayarak görebilirsin. Ama dikkat: Colab oturumu kapanınca bu dosyalar da silinir. Kalıcı saklamak istediğin bir dosyayı bilgisayarına indirmen gerekir.
İlk dosyamızı yazalım
open() fonksiyonu bir dosyayı açar. Ona iki şey söylüyoruz: dosyanın adı ve ne yapacağımız.
dosya = open("notlar.txt", "w", encoding="utf-8")dosya.write("Bugün dosyalara giriş yaptım.\n")dosya.write("Şimdi ne öğrendiğimi okuyacağım.\n")dosya.close()print("Dosya yazıldı.")
Satır satır ne oluyor:
"w": yazmak için aç (write). Dosya yoksa oluşturulur.encoding="utf-8": ç, ğ, ı, ö, ş, ü gibi Türkçe karakterlerin doğru kaydedilmesi için. Bunu her dosya işleminde yazmayı alışkanlık hâline getir.\n: satır sonu. Yazmazsan iki cümle aynı satıra yapışır.close(): dosyayı kapat. Unutursan yazdıkların dosyaya tam kaydedilmeyebilir.
with: kapatmayı Python’a bırak
close() yazmayı unutmak çok kolay. with bloğu bu yükten kurtarıyor: Blok bitince dosya kendiliğinden kapanır. Bundan sonra hep bu yolu kullanacağız.
with open("notlar.txt", "r", encoding="utf-8") as dosya: icerik = dosya.read()print(icerik)
Bugün dosyalara giriş yaptım.Şimdi ne öğrendiğimi okuyacağım.
"r" okumak (read) demek. read() dosyanın tamamını tek bir metin olarak getirir.
Üç temel mod: r, w, a
| Mod | Anlamı | Dosya yoksa | Dosya varsa |
|---|---|---|---|
"r" | oku | hata verir | baştan okur |
"w" | yaz | oluşturur | içini siler, baştan yazar |
"a" | ekle | oluşturur | sonuna ekler |
En sık yapılan hata: Var olan bir dosyaya bir şey eklemek isterken "w" kullanmak. "w" dosyanın içini sorgusuz sualsiz siler. Eski içeriği korumak istiyorsan "a" (append) kullan:
with open("notlar.txt", "a", encoding="utf-8") as dosya: dosya.write("Bu satır sonradan eklendi.\n")
Satır satır okumak
Dosyayı bir for döngüsüne verirsen her turda bir satır gelir:
with open("notlar.txt", "r", encoding="utf-8") as dosya: for numara, satir in enumerate(dosya, start=1): print(numara, satir.strip())
1 Bugün dosyalara giriş yaptım.2 Şimdi ne öğrendiğimi okuyacağım.3 Bu satır sonradan eklendi.
Her satırın sonunda bir \n karışıyor. strip() onu atıyor; yoksa satırların arasında boş satırlar görürsün. enumerate ise satırları numaralandırmamızı sağlıyor.
Tüm satırları bir listeye almak istersen:
with open("notlar.txt", "r", encoding="utf-8") as dosya: satirlar = dosya.read().splitlines()print(len(satirlar)) # 3
Sayıları yazmak: önce metne çevir
write() sadece metin kabul eder. Bir sayıyı yazmadan önce str() ile metne çevirmen, okurken de int() ile geri sayıya çevirmen gerekir:
puanlar = [85, 92, 78]with open("puanlar.txt", "w", encoding="utf-8") as dosya: for puan in puanlar: dosya.write(str(puan) + "\n")with open("puanlar.txt", "r", encoding="utf-8") as dosya: okunan = [int(satir) for satir in dosya]print(okunan) # [85, 92, 78]print(sum(okunan) / len(okunan)) # 85.0
Okuma kısmındaki tek satırlık döngü, Ders 12’de öğrendiğimiz liste üreteci.
Devamını oku: Kümeler ve Liste Üreteçleri (Python Dersi 12)
Dosya yoksa ne olur?
Olmayan bir dosyayı "r" ile açmaya çalışırsan Python FileNotFoundError verir ve program durur. Geçen derste öğrendiğimiz try ve except tam burada işe yarıyor:
try: with open("olmayan_dosya.txt", "r", encoding="utf-8") as dosya: print(dosya.read())except FileNotFoundError: print("Böyle bir dosya yok. Önce oluşturman gerekiyor.")
Devamını oku: Hata Yönetimi: try ve except (Python Dersi 13)
CSV dosyaları
Veri analizine geçtiğinde en sık göreceğin dosya türü CSV olacak. Her satır bir kayıt, değerler virgülle ayrılmış. Aslında düz bir metin dosyası, Excel’de de açılabiliyor. Python’un hazır csv modülü bu işi kolaylaştırıyor:
import csvogrenciler = [ ["ad", "bolum", "not"], ["Ayşe", "Bilgisayar", 88], ["Mehmet", "Endüstri", 74], ["Zeynep", "Bilgisayar", 95],]with open("ogrenciler.csv", "w", encoding="utf-8", newline="") as dosya: yazici = csv.writer(dosya) yazici.writerows(ogrenciler)
newline="" bazı sistemlerde satırlar arasında fazladan boş satır oluşmasını engelliyor. CSV yazarken eklemeyi unutma.
Okurken csv.DictReader her satırı bir sözlüğe çeviriyor, böylece sütunlara adıyla ulaşabiliyorsun:
with open("ogrenciler.csv", "r", encoding="utf-8") as dosya: for satir in csv.DictReader(dosya): print(satir["ad"], "->", satir["not"])
Ayşe -> 88Mehmet -> 74Zeynep -> 95
Dikkat: CSV’den okunan her şey metin olarak gelir. satir["not"] bir sayı değil, "88" gibi bir metin. Hesap yapacaksan int() ile çevirmen gerekiyor.
Gerçek bir veri projesinde CSV’leri genelde pandas kütüphanesiyle okuyoruz, ama arka planda olan şey tam olarak bu.
Devamını oku: Futbol Veri Projesi 1: Maç Verisini Toplamak ve Temizlemek
Mini proje: unutmayan alışveriş listesi
Öğrendiklerimizi birleştirelim. Program her açıldığında listeyi dosyadan yüklesin, yeni ürün eklenince dosyaya kaydetsin:
LISTE_DOSYASI = "alisveris.txt"def listeyi_yukle(): try: with open(LISTE_DOSYASI, "r", encoding="utf-8") as dosya: return dosya.read().splitlines() except FileNotFoundError: return []def urun_ekle(urun): with open(LISTE_DOSYASI, "a", encoding="utf-8") as dosya: dosya.write(urun + "\n")def listeyi_goster(): liste = listeyi_yukle() if not liste: print("Liste boş.") for sira, urun in enumerate(liste, start=1): print(f"{sira}. {urun}")listeyi_goster()urun_ekle("süt")urun_ekle("ekmek")urun_ekle("domates")print("---")listeyi_goster()
Liste boş.---1. süt2. ekmek3. domates
Burada üç dersin bir araya geldiğini görüyorsun: fonksiyonlar (Ders 9), hata yönetimi (Ders 13) ve dosyalar. Dosya henüz yoksa listeyi_yukle() programı çökertmek yerine boş bir liste döndürüyor.
Colab’da son hücreyi bir kez daha çalıştır: Ürünler iki kez eklenir. Çünkü liste artık programın içinde değil, dosyada duruyor. Programı kapatıp açsan da kaybolmuyor. Bu dersin bütün meselesi de bu.
Alıştırmalar
gunluk.txtadında bir dosya oluştur ve içine üç satır yaz. Sonra dosyayı okuyup kaç satır olduğunu ekrana yazdır.puanlar.txtdosyasına içini silmeden iki yeni puan ekle. Sonra en yüksek puanı bul.ogrenciler.csvdosyasınıDictReaderile oku ve sadece Bilgisayar bölümündeki öğrencilerin not ortalamasını hesapla.- Alışveriş listesine
urun_sil(urun)fonksiyonu ekle. İpucu: Listeyi yükle, ürünü çıkar, kalanları"w"ile baştan yaz.
Cevaplar not defterinin sonunda.
Bu derste neler öğrendik?
open(dosya, mod, encoding="utf-8")bir dosyayı açar.withbloğu dosyayı kendiliğinden kapatır."r"okur,"w"silip yazar,"a"sonuna ekler.- Dosyayı
forile gezersen satır satır okursun;strip()satır sonunu temizler. write()sadece metin alır: Sayılarıstr()ile çevir.- Olmayan dosya
FileNotFoundErrorverir;tryveexceptile yakala. - CSV için
csv.writervecsv.DictReaderkullan, okunan değerlerin metin olduğunu unutma.
Sıradaki ders
Bir sonraki derste Python’un gücünün asıl kaynağına geliyoruz: başkalarının yazdığı hazır kodları kullanmak. Bu derste import csv diyerek küçük bir tadımını aldık.
Sıradaki ders: Modüller ve pip: Hazır Kütüphaneleri Kullanmak (Python Dersi 15)

Bir yanıt yazın