Dosya Okuma ve Yazma (Python Dersi 14)

Ş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

ModAnlamıDosya yoksaDosya varsa
"r"okuhata verirbaştan okur
"w"yazoluştururiçini siler, baştan yazar
"a"ekleoluşturursonuna 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 csv
ogrenciler = [
["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 -> 88
Mehmet -> 74
Zeynep -> 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üt
2. ekmek
3. 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

  1. gunluk.txt adında bir dosya oluştur ve içine üç satır yaz. Sonra dosyayı okuyup kaç satır olduğunu ekrana yazdır.
  2. puanlar.txt dosyasına içini silmeden iki yeni puan ekle. Sonra en yüksek puanı bul.
  3. ogrenciler.csv dosyasını DictReader ile oku ve sadece Bilgisayar bölümündeki öğrencilerin not ortalamasını hesapla.
  4. 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.
  • with bloğu dosyayı kendiliğinden kapatır.
  • "r" okur, "w" silip yazar, "a" sonuna ekler.
  • Dosyayı for ile gezersen satır satır okursun; strip() satır sonunu temizler.
  • write() sadece metin alır: Sayıları str() ile çevir.
  • Olmayan dosya FileNotFoundError verir; try ve except ile yakala.
  • CSV için csv.writer ve csv.DictReader kullan, 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)


Hatice Özbolat | Teknoloji ve AI Rehberi sitesinden daha fazla şey keşfedin

Son gönderilerin e-postanıza gönderilmesi için abone olun.

Comments

Bir yanıt yazın