
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.
open() fonksiyonu bir dosyayı açar ve bir dosya nesnesi döndürür. En sık kullanılan parametreler:
Ö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ı).
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)
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.
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()
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.
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.
for line in f yapısı en verimli yöntemlerden biridir.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