Python Dosya İşlemleri: Okuma, Yazma ve CSV Örnekleri
Dosya işlemleri, uygulamaların kalıcı veri saklaması, yapılandırılmış veri alışverişi ve günlükleme (logging) gibi işlevleri için temel gereksinimdir. Bu rehberde open() ile dosya açma, okuma/yazma modları, CSV dosyalarıyla çalışma ve üretim benzeri senaryolar için iyi uygulamalar gösterilecektir. Temel tanımlar ve modlar için kısa bir giriş için Diveebi - Python'da Dosya İşlemleri kaynağı faydalı olacaktır.
Temel kavramlar: open(), modlar ve close()
Python'da dosya işlemleri için yerleşik open() fonksiyonu kullanılır. Dosya modları (ör. 'r', 'w', 'a') dosyanın nasıl açılacağını belirler. Manuel olarak close() çağrılabilir, ancak bağlam yöneticisi (context manager) kullanmak kapatmayı otomatik hâle getirir; bu yaklaşım kaynak yönetimi açısından önerilir (bkz. kaynaklar).
Dosya modları (kısa özet)
- 'r' – Okuma modu. Dosya yoksa FileNotFoundError oluşur.
- 'w' – Yazma modu. Dosya varsa içeriği siler, yoksa oluşturur.
- 'a' – Ekleme (append) modu. Dosya varsa sonuna ekler, yoksa oluşturur.
- 'x' – Yalnızca oluşturma. Dosya varsa hata verir.
- 'b' – İkili (binary) mod. Örn. 'rb', 'wb'—görüntü veya ikili veriler için.
- 't' – Metin (text) modu; genellikle varsayılandır (örn. 'rt').
- '+' – Okuma ve yazma kombinasyonu (örn. 'r+', 'w+').
Bu modların ayrıntıları ve kullanım örnekleri için ayrıca Facadium rehberine bakabilirsiniz.
Metin dosyası okuma: temel örnekler
Basit bir metin dosyasını okumak için en sık kullanılan yöntem bağlam yöneticisidir:
with open('ornek.txt', 'r', encoding='utf-8') as f:
content = f.read()
Alternatif olarak satır satır okumak belleği daha tasarruflu kullanır:
with open('ornek.txt', 'r', encoding='utf-8') as f:
for line in f:
print(line.strip())
Diğer seçenekler: f.readline() (tek satır), f.readlines() (tüm satırları liste olarak alır). Encoding parametresi (ör. 'utf-8') özellikle Türkçe karakterler için önemlidir.
Dosyaya yazma ve ekleme
Yazma örneği:
with open('ornek.txt', 'w', encoding='utf-8') as f:
f.write('Merhaba Dünya\n')
Eklemek için:
with open('ornek.txt', 'a', encoding='utf-8') as f:
f.write('Yeni satır\n')
'w' modu mevcut dosyayı sıfırlar; mevcut veriyi kaybetmek istemiyorsanız 'a' kullanın.
İkili (binary) dosyalar
Görüntü, ses veya sıkıştırılmış veriler gibi ikili içerikler için 'rb'/'wb' kullanın:
with open('resim.png', 'rb') as f:
data = f.read()
Binary veriler üzerinde işlem yaparken byte dizileriyle (bytes) çalışıldığını unutmayın.
CSV dosyalarıyla çalışma (csv modülü)
CSV dosyalarını okumak/yazmak için Python'un yerleşik csv modülü kolay ve etkilidir. Aşağıdaki örnekleri Muhammed DİNÇER'in rehberine paralel şekilde kullanabilirsiniz.
Örnek CSV içeriği:
isim,yaş,şehir
Ali,30,İstanbul
Ayşe,25,Ankara
Okuma (reader):
import csv
with open('kisiler.csv', 'r', encoding='utf-8') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
print(row)
Alan isimleriyle çalışmak için DictReader kullanabilirsiniz:
with open('kisiler.csv', 'r', encoding='utf-8') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
print(row['isim'], row['yaş'])
Yazma (writer) örneği - Windows'ta fazladan boş satır oluşmasını önlemek için newline='' kullanılması önerilir:
with open('cikti.csv', 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(['isim', 'yaş', 'şehir'])
writer.writerows([['Ali','30','İstanbul'], ['Ayşe','25','Ankara']])
DictWriter ile sözlük tabanlı yazma da mümkündür. CSV ile ilgili pratik ipuçları ve örnekler için Muhammed DİNÇER'in yazısı faydalıdır.
Pandas ile CSV okuma/yazma (büyük veri için)
Daha büyük veya analize hazır veri setleri için pandas kütüphanesi sık tercih edilir:
import pandas as pd
df = pd.read_csv('kisiler.csv', encoding='utf-8')
df_filtered = df[df['yaş'] >= 30]
df_filtered.to_csv('ust30.csv', index=False)
Pandas, veri filtreleme ve dönüşümlerini tek satırda yapmayı kolaylaştırır; fakat küçük dosyalar için csv modülü daha hafif bir alternatiftir.
İyi uygulamalar ve sık karşılaşılan durumlar
- Kullanım sonrası dosyayı kapatmak için with (context manager) kullanın; bu, kaynak sızıntılarını önler.
- Kodunuzda her zaman encoding='utf-8' belirtmeye çalışın; aksi halde Türkçe karakter problemleri çıkabilir.
- CSV yazarken newline='' parametresi Windows ortamında ekstra boş satırları engeller.
- Dosya yoksa kontrol etmek için os.path.exists() veya pathlib.Path.exists() kullanın.
- Dosya erişim hatalarını yakalamak için try/except bloğu kullanın (örn. FileNotFoundError, PermissionError).
- Path yönetimi için pathlib modern ve taşınabilir bir çözüm sağlar.
Kısa bir hata yakalama örneği:
try:
with open('dosya.txt','r',encoding='utf-8') as f:
data = f.read()
except FileNotFoundError:
print('Dosya bulunamadı')
Adım adım küçük proje: CSV'den filtreleyip yeni CSV oluşturma
- Kaynak CSV'yi DictReader ile açın ve alan adlarını alın.
- Filtreleme koşulunuzu uygulayın (ör. yaş >= 30).
- DictWriter ile başlık yazıp filtrelenmiş satırları kaydedin.
Örnek kod (özet):
import csv
with open('kisiler.csv','r',encoding='utf-8') as infile:
reader = csv.DictReader(infile)
rows = [row for row in reader if int(row['yaş']) >= 30]
with open('ust30.csv','w',newline='',encoding='utf-8') as outfile:
writer = csv.DictWriter(outfile, fieldnames=reader.fieldnames)
writer.writeheader()
writer.writerows(rows)
Kontrol listesi (Quick checklist)
- Doğru dosya yolu ve isim belirtildi mi?
- Encoding (örn. utf-8) ayarlandı mı?
- Bağlam yöneticisi (with) kullanılıyor mu?
- CSV yazarken newline='' eklendi mi?
- Gerekli izinler (read/write) mevcut mu?
Kaynaklar ve ileri okuma:
- Python'da Dosya İşlemleri — Diveebi
- Python ile CSV Dosya Okuma ve Yazma — Muhammed DİNÇER
- Python’da Dosya Açma ve Yazma İşlemleri — Facadium
Bu rehberde verilen örnekler temel kullanım içindir; üretim ortamında dosya izinleri, büyük dosya optimizasyonu ve güvenlik kontrollerini projenizin ihtiyaçlarına göre değerlendirin.