Python ile dosya okuma ve yazma: pratik örnekler ve kod ipuçları
Python Dosya İşlemleri

Python ile dosya okuma ve yazma: pratik örnekler ve kod ipuçları

Python Dosya İşlemleri

4 dk okuma süresi
Bu makalede Python'da dosya okuma ve yazma işlemlerinin temelleri; 'with open' kullanımı, text vs binary modlar, encoding ipuçları ve platforma uygun dosya yolu yönetimi pratik örneklerle açıklanmıştır.
Python ile dosya okuma ve yazma: pratik örnekler ve kod ipuçları

Python ile dosya okuma ve yazma: pratik örnekler ve kod ipuçları

Python'da dosya işlemleri için en temel araç open() fonksiyonudur. Bu rehberde hem basit hem de üretim-benzeri senaryolar için kullanışlı python kod snippetleri paylaşacağım: 'with open' ile güvenli dosya kullanımı, encoding yönetimi, ikili (binary) okuma/yazma ve platform bağımsız dosya yolu yönetimi gibi konulara odaklanacağız. Resmi belgelerde daha fazla ayrıntı için Python dokümantasyonuna bakabilirsiniz: Girdi ve Çıktı ve io kütüphanesi.

1. Temel: open(), mode ve encoding

open() fonksiyonu bir dosyayı açar ve bir dosya nesnesi döndürür. En sık kullanılan parametreler:

  • file: dosya yolu
  • mode: 'r', 'w', 'a', 'x', 'b', 't', '+' gibi modlar
  • encoding: metin dosyalarında ör. 'utf-8'

Örnek (tam içerik okuma):

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

Burada with kullandığımız için dosya bloğundan çıkıldığında otomatik olarak kapatılır; bu uygulama resmi dökümantasyonda önerilen kullanımdır (bkz. Python Girdi/Çıktı).

2. Modların kısa özeti

  • 'r': sadece okuma (dosya yoksa hata verir)
  • 'w': yazma, var olan dosyayı sıfırlar/truncate eder
  • 'a': ekleme (append) — yazma işlemi mevcut dosya sonuna ekler
  • 'x': özel yaratma — dosya varsa hata verir
  • 'b': binary modu (örn. 'rb', 'wb')
  • '+': hem okuma hem yazma (örn. 'r+', 'w+')

3. with open örnekler (pratik kullanım)

Satır satır okuma (bellek dostu):

with open('log.txt', 'r', encoding='utf-8') as f:
for line in f:
process(line)

Tüm dosyayı liste olarak almak:

with open('data.csv', 'r', encoding='utf-8') as f:
lines = f.readlines()

Yazma örneği:

lines = ['satır1\n', 'satır2\n']
with open('out.txt', 'w', encoding='utf-8') as f:
f.writelines(lines)

4. Text vs Binary: read write binary

Metin dosyaları ('t' varsayılan) ve ikili dosyalar ('b') farklı davranır. Görüntü, ses, arşiv gibi dosyaları binary modda açmak gerekir. Örnek: bir resmi kopyalamak:

with open('image.png', 'rb') as src, open('copy.png', 'wb') as dst:
while True:
chunk = src.read(8192)
if not chunk:
break
dst.write(chunk)

Alternatif, biraz daha kısa idiom (aynı mantık, sentinel kullanımı):

with open('image.png', 'rb') as src, open('copy.png', 'wb') as dst:
for chunk in iter(lambda: src.read(8192), b''):
dst.write(chunk)

Her iki yöntemde de dosyalar parça parça okunup yazılır; bu, büyük dosyalar için bellek kullanımını azaltır.

5. Encoding ipuçları

Metin dosyası açarken encoding parametresini belirtmek tutarlılık sağlar. Aksi halde sistemin varsayılan kodlaması kullanılabilir ve platformlar arasında farklılık görülebilir. Eğer dosyada bilinmeyen karakterlerle karşılaşma ihtimali varsa errors parametresi (ör. 'replace' veya 'ignore') kullanılabilir. Daha fazla bilgi için io dokümantasyonuna bakın.

Örnek:

with open('notes.txt', 'r', encoding='utf-8', errors='replace') as f:
text = f.read()

6. Dosya yolu yönetimi: os.path ve pathlib

Platform bağımsız dosya yolu yönetimi için os.path veya modern alternatif olarak pathlib kullanmak iyidir. os modülü platform farklılıklarını ele almada yardımcı olur.

os.path ile örnek:

import os
base = '/home/user'
path = os.path.join(base, 'data', 'file.txt')

pathlib ile daha okunaklı:

from pathlib import Path
p = Path.home() / 'data' / 'file.txt'
with p.open('r', encoding='utf-8') as f:
content = f.read()

Pathlib, dosya varlığını kontrol etme, dizin oluşturma gibi işlemleri de daha açık API ile sunar.

7. Hatalar, istisnalar ve güvenlik

Dosya işlemleri I/O hatalarına açıktır: dosya yoksa, izin yoksa veya disk doluysa istisnalar fırlatılabilir. Basit bir örnek:

try:
with open('config.ini', 'r', encoding='utf-8') as f:
cfg = f.read()
except FileNotFoundError:
print('Dosya bulunamadı')
except PermissionError:
print('İzin hatası')

Ayrıca yazma işlemlerinde dosya izni ve path doğrulaması yapmanız, kullanıcı girişleriyle oluşturulan dosya yollarını mutlaka temizlemeniz önerilir.

8. Performans ve büyük dosyalar

  • Bellek sınırlaması olan ortamlar için dosyayı parça parça okumak en uygunudur (chunking).
  • Satır tabanlı işleme gerekiyorsa for line in f yapısı en verimli yöntemlerden biridir.
  • Çok sayıda küçük yazma işlemi varsa buffering veya tek seferde birleştirilmiş yazma daha hızlı olabilir.

9. Kontrol listesi: Dosya işlemi yazmadan önce

  • Doğru mode seçildi mi? (r/w/a/x/b)
  • Metin dosyaları için encoding belirlendi mi?
  • Dosya yolu platforma uygun şekilde oluşturuldu mu? (os.path veya pathlib kullan)
  • Hatalara karşı try/except yapısı veya hata kaydı eklendi mi?
  • Kaynak ve hedef dosyalar için izin kontrolleri yapıldı mı?
  • Büyük dosyalar için parça-parça okuma/yazma planlandı mı?

10. Kısa örnekler — hızlı referans

Yeni bir dosya oluşturup yazma (varsa üzerine yazar):

with open('notes.txt', 'w', encoding='utf-8') as f:
f.write('Merhaba dünya\n')

Var olan dosyanın sonuna ekleme:

with open('notes.txt', 'a', encoding='utf-8') as f:
f.write('Yeni satır\n')


Bu rehberde ele alınan temel kavramlar ve örnekler, Python'un resmi belgelerindeki önerilerle uyumludur. Daha ayrıntılı teknik referans için Python Girdi ve Çıktı, io kütüphanesi ve os modülü sayfalarına bakabilirsiniz.

Yorumlar

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