Dosyaları satır satır verimli bir şekilde okumak, her Python programcısı için çok önemli bir beceridir. Günlükleri işliyor, verileri ayrıştırıyor veya yapılandırma dosyalarıyla çalışıyor olun, farklı yaklaşımları ve bunların avantajlarını ve dezavantajlarını anlamak çok önemlidir. Bu makale, üç yaygın yöntemi inceleyerek, belirli ihtiyaçlarınız için en iyi yaklaşımı seçmenize yardımcı olmak amacıyla güçlü ve zayıf yönlerini vurgular.
İçindekiler Tablosu
readlines()
Kullanımı- Dosya Nesnesi Üzerinden İterasyon
read()
vesplitlines()
Kullanımı- Yöntemlerin Karşılaştırılması
readlines()
Kullanımı
readlines()
yöntemi, bir dosyanın tüm satırlarını bir listeye okumak için basit bir yol sağlar. Listedeki her öğe, yeni satır karakteri de dahil olmak üzere tek bir satırı temsil eder.
def read_file_readlines(filepath):
"""readlines() kullanarak bir dosyayı satır satır okur ve satırların bir listesini döndürür."""
try:
with open(filepath, 'r') as file:
lines = file.readlines()
return lines
except FileNotFoundError:
return None
filepath = 'my_file.txt' # Dosya yolunuzu buraya yazın
lines = read_file_readlines(filepath)
if lines:
for line in lines:
print(line, end='') #end='' fazladan yeni satırı önler
else:
print(f"'{filepath}' dosyası bulunamadı.")
Avantajlar: Basit ve özlü. Tüm dosya bir kerede belleğe yüklenir, bu da daha sonra herhangi bir satıra erişimi çok hızlı hale getirir.
Dezavantajlar: Büyük dosyalar için bellek yoğunluklu. Yeni satır karakteri (`n`) her satırın sonuna dahil edilir.
Dosya Nesnesi Üzerinden İterasyon
Büyük dosyalar için, dosya nesnesi üzerinden doğrudan yineleme daha bellek verimli bir çözüm sunar. Bu yöntem, tüm dosyayı belleğe yüklemekten kaçınarak, bir seferde bir satırı okur ve işler.
def read_file_iter(filepath):
"""Yineleme kullanarak bir dosyayı satır satır okur ve satırların bir listesini döndürür."""
try:
lines = []
with open(filepath, 'r') as file:
for line in file:
lines.append(line)
return lines
except FileNotFoundError:
return None
filepath = 'my_file.txt'
lines = read_file_iter(filepath)
if lines:
for line in lines:
print(line, end='')
else:
print(f"'{filepath}' dosyası bulunamadı.")
Avantajlar: Bellek verimli, büyük dosyalar için uygundur. İşleme, tüm dosya okunmadan önce başlayabilir.
Dezavantajlar: readlines()
‘den biraz daha ayrıntılı. Yeni satır karakteri (`n`) her satırın sonuna dahil edilir.
read()
ve splitlines()
Kullanımı
file.read()
yöntemi, tüm dosya içeriğini tek bir dizeye okur. Daha sonra bu dizeyi satırların bir listesine bölmek için splitlines()
yöntemini kullanabiliriz. splitlines()
varsayılan olarak yeni satır karakterlerini kaldırır.
def read_file_read(filepath):
"""file.read() kullanarak bir dosyayı satır satır okur ve satırların bir listesini döndürür."""
try:
with open(filepath, 'r') as file:
file_content = file.read()
lines = file_content.splitlines()
return lines
except FileNotFoundError:
return None
filepath = 'my_file.txt'
lines = read_file_read(filepath)
if lines:
for line in lines:
print(line)
else:
print(f"'{filepath}' dosyası bulunamadı.")
Avantajlar: Nispeten basit.
Dezavantajlar: Bölmeden önce tüm dosyayı belleğe okuduğu için büyük dosyalar için yinelemeden daha az verimli. Yeni satır karakteri, splitlines()
tarafından varsayılan olarak kaldırılır.
Yöntemlerin Karşılaştırılması
En iyi yöntem, belirli ihtiyaçlarınıza ve dosyanızın boyutuna bağlıdır. Çok büyük dosyalar için, bellek verimliliği nedeniyle yineleme genellikle önerilir. Daha küçük dosyalar için, readlines()
‘in basitliği tercih edilebilir. Aşırı bellek kullanımını önlemek için büyük dosyalar için read().splitlines()
kullanımından kaçının.
Yöntem | Bellek Verimliliği | Hız | Yeni Satır İşleme | Basitlik |
---|---|---|---|---|
readlines() |
Düşük | Hızlı | Dahil | Yüksek |
Yineleme | Yüksek | Hızlı | Dahil | Orta |
read().splitlines() |
Düşük | Yavaş | Kaldırılmış | Orta |
FileNotFoundError
gibi olası istisnaları her zaman işlemeye dikkat edin.