Python dosya işlemleri: with, encoding ve CSV örnekleri
Python Dosya İşlemleri

Python dosya işlemleri: with, encoding ve CSV örnekleri

Python Dosya İşlemleri

5 dk okuma süresi
Bu makale, Python'da dosya işlemleri (open(), with), encoding kullanımı ve csv modülü ile okuma/yazma örneklerini pratik kodlarla açıklar.
Python dosya işlemleri: with, encoding ve CSV örnekleri

Giriş

Dosya işlemleri, Python ile gerçek dünya verilerini okumak, kaydetmek ve paylaşmak için temel bir beceridir. Bu rehberde open() fonksiyonunun nasıl kullanıldığı, with bağlam yöneticisinin (context manager) neden tercih edildiği, encoding ile ilgili dikkat edilmesi gerekenler ve Python'un csv modülü ile CSV dosyalarını okuma/yazma pratikleri ele alınacaktır. Örnekler adım adım ve üretim ortamına uygulanabilir şekilde hazırlanmıştır.

open() fonksiyonu: Temel kullanımlar

Python'da bir dosya açmak için temel araç open() fonksiyonudur. open() ile dosyayı hangi modda açacağınızı belirtirsiniz: okumak için 'r', yazmak için 'w', ekleme için 'a', ikili mod için 'b' gibi. Metin modunda karakter dizileriyle, ikili modda (binary) ise byte dizileriyle çalışırsınız. Daha fazla bilgi için Python resmi belgelerine bakabilirsiniz: Python — Girdi ve Çıktı.

Örnek: basit dosya okuma

with open('ornek.txt', 'r', encoding='utf-8') as f:
icerik = f.read()
print(icerik)

Bu örnekte open() ile dosya okunmak üzere açılıyor ve read() ile içerik alınıyor. Encoding parametresi burada karakter dönüşümünü yönetir (aşağıda ayrıntı var).

with ifadesi: kaynak yönetimi ve güvenli kapanış

Dosyaları açarken with ifadesini kullanmak tercih edilir çünkü blok bittiğinde dosya nesnesi otomatik olarak kapatılır. Bu, kaynak sızıntılarını önler ve kodu daha temiz yapar. Python belgeleri de bu yaklaşımı önerir: Python giriş/çıkış rehberi.

Örnek: satır satır okuma

with open('veriler.txt', 'r', encoding='utf-8') as f:
for satir in f:
print(satir.strip())

Alternatif olarak dosya nesnesini açık bırakmak ve manuel kapatmak mümkündür, ancak hata durumlarında dosyanın kapatılmaması riski vardır. with bunu ortadan kaldırır.

Encoding (karakter kodlaması) nasıl ele alınır?

Dosyalar metin içeriyorsa hangi karakter kodlaması kullanıldığı önemlidir. open() fonksiyonunun encoding parametresi ile dosya için kodlama belirtilebilir. UTF-8 günümüzde yaygın tercih edilen bir kodlamadır; uluslararası karakterlerin doğru okunmasını sağlar.

Örnek: farklı kodlama ile okuma

with open('turkce.txt', 'r', encoding='utf-8') as f:
metin = f.read()

Eğer dosyada UTF-8 BOM varsa ve Excel gibi uygulamalarda sorun yaşanıyorsa, bazen 'utf-8-sig' kullanmak BOM'u göz ardı eder ve uyumluluğu artırır. Kodlama uyuşmazlıkları UnicodeDecodeError gibi hatalara yol açabilir; bu durumda doğru encoding'i belirlemek veya hatayı yakalamak gerekir.

Binary dosya işlemleri

İkili dosyalar (ör. resim, PDF, sıkıştırılmış veriler) ile çalışırken dosyayı 'b' moduyla açmalısınız. Bu mod byte verisi döndürür ve herhangi bir karakter kodlaması uygulanmaz.

Örnek: binary dosya yazma

data = b"\x89PNG..." # örnek byte dizisi
with open('resim.png', 'wb') as f:
f.write(data)

Binary modda read() ve write() byte nesneleri ile çalışır; text metotlarıyla karıştırılmamalıdır.

CSV dosyaları: csv modülü ile güvenli okuma ve yazma

CSV (virgülle ayrılmış değerler) dosyalarını işlemek için Python'un standart csv modülü uygundur. Modülün işleyişi ve parametreleri için resmi belgeye bakabilirsiniz: csv — CSV dosyalarının okunması ve yazılması.

Önemli ipuçları:

  • Yazarken Windows üzerinde ekstra boş satırlar oluşmasını önlemek için dosyayı newline='' ile açın.
  • Alan adlarıyla çalışmak için DictReader ve DictWriter kullanışlıdır.
  • Excel uyumluluğu için 'utf-8-sig' ile BOM eklemek gerekebilir.

CSV okuma örneği (reader)

with open('kisiler.csv', 'r', encoding='utf-8') as f:
import csv
reader = csv.reader(f)
for satir in reader:
print(satir)

CSV okuma örneği (DictReader)

with open('kisiler.csv', 'r', encoding='utf-8') as f:
import csv
reader = csv.DictReader(f)
for satir in reader:
print(satir['isim'], satir['email'])

CSV yazma örneği (DictWriter)

with open('cikti.csv', 'w', encoding='utf-8', newline='') as f:
import csv
alanlar = ['isim', 'email']
writer = csv.DictWriter(f, fieldnames=alanlar)
writer.writeheader()
writer.writerow({'isim': 'Ayse', 'email': '[email protected]'})

Pratik tarifler (recipes)

  • Hızlı metin dosyası okuma: with open('dosya.txt', 'r', encoding='utf-8') as f: content = f.read()
  • Satır satır ilerleme: for satir in f: do_something(satir.strip())
  • Binary dosya kopyalama: with open('kaynak.bin','rb') as r, open('hedef.bin','wb') as w: w.write(r.read())
  • CSV'yi DataFrame'e aktarma: küçük projelerde csv modülü yeterliyken, daha büyük veri işlerken pandas.read_csv tercih edilir (pandas kullanımında newline yok).

Hata ayıklama ve sık karşılaşılan problemler

  • Encoding hataları: UnicodeDecodeError alırsanız dosyanın kodlamasını kontrol edin; gerekirse encoding parametresini değiştirin ('utf-8', 'latin-1', 'utf-8-sig').
  • Boş satırlar (CSV): Yazarken newline='' kullanmak Windows'ta ekstra boş satır sorununu çözer.
  • Dosya yok hatası: open() çağrısında FileNotFoundError alınabilir; try/except ile yakalayın veya önce pathlib.Path.exists() ile kontrol edin.

Kontrol listesi: dosya işlemlerinde dikkat edilmesi gerekenler

  1. Metin dosyası ise encoding belirtin (genelde 'utf-8').
  2. Kaynağı otomatik kapatmak için with kullanın.
  3. Binary veriler için 'b' modunu kullanın.
  4. CSV yazarken newline='' kullanın ve DictWriter tercih edinse alan adlarını tanımlayın.
  5. Dosya yollarında pathlib ile çalışmak platformlar arası uyumluluğu artırır.

Kaynaklar ve ileri okuma

Bu rehberin teknik noktaları Python'un resmi belgelerine dayanmaktadır: 7. Girdi ve Çıktı — Python 3 belgeleri ve csv modülü belgeleri. Daha fazla uygulama örneği için bu kaynaklar doğrudan başvurulabilir.

Özet

open(), with ve csv modülü, Python'da dosya işlemlerini güvenli ve okunabilir şekilde gerçekleştirmenize olanak tanır. Encoding'e dikkat etmek, binary/text ayrımını doğru yapmak ve csv yazarken newline parametresini kullanmak en sık yapılan iyi uygulamalardır. Bu makaledeki örnekler temel ihtiyaçları karşılayacak şekilde seçilmiştir; karmaşık veri işleme için ek araçlar (ör. pandas) değerlendirilebilir.

Yorumlar

Henüz yorum yapılmamış. İlk yorumu sen yaz.