Python Tutorials

Python’da Dosyaları Satır Satır Etkin Bir Şekilde Okuma

Spread the love

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ı

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.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir