Python ile Dosya Okuma

Giriş

Depolanan verilerle çalışmak için dosya işleme, her profesyonel Python programcısının temel bilgisi haline gelir. En eski sürümünden itibaren, dosyalara veri okuma ve yazma, yerleşik Python özellikleridir. C veya Java gibi diğer programlama dilleriyle karşılaştırıldığında, oldukça basittir ve yalnızca birkaç satır kod gerektirir. Ayrıca, bunu düzgün bir şekilde yapmak için fazladan bir modül yüklenmesi gerekmez.

Bu yazımızda Python ile nasıl dosya okunacağını örnekler üzerinden anlatacağız. Bazı örnekler, bir dosyayı satır satır, bir yığın (bir seferde tanımlanmış sayıda satır) olarak okumayı ve bir dosyayı tek seferde okumayı içerir. Ayrıca, tüm dosyayı aramadan yalnızca dosyadan belirli bir satırı okumanın bir yolunu göstereceğiz.

Python'da Dosyaların Temelleri

Dosyalarla çalışmak için yaygın yöntemler şunlardır: open() bir dosyayı açmak için, seek() dosyanın mevcut konumunu verilen ofsette ayarlamak ve close() Dosya nesnesini kullanmayı bitirdiğinizde kapatmak için. yerleşik open() işlevi, okuma, yazma veya ekleme için dosyaya erişmek için kullanılacak bir dosya nesnesini temsil eden bir dosya tanıtıcısı döndürür.

Bir dosyayı okumak için açarken, Python'un dosyanın sistemle nasıl açılması gerektiğini tam olarak bilmesi gerekir. İki erişim modu mevcuttur – ikili modda okuma ve okuma. Kullanılan ilgili bayraklar 'r', ve 'rb', ve yerleşik ile bir dosya açarken belirtilmelidir open() işlev. İlk mod, satır sonlarını temsil etmek için “CR” (satır başı) ve “LF” (satır besleme) gibi özel karakterlerin yorumlanmasını içerirken, ikili mod, verilerin olduğu gibi depolandığı ham modda verileri okumanıza izin verir. daha fazla yorum yapmadan.

Bir dosyayı açtıktan sonra, open() işlevi size bir dosya nesnesi döndürür. Bu dosya nesnelerinin aşağıdaki gibi yöntemleri vardır. read(), readline(), write(), tell(), ve seek(). Bazı dosya nesneleri (veya dosya benzeri nesneler) burada listelenenlerden daha fazla yönteme sahip olsa da, bunlar en yaygın olanlarıdır. Tüm dosya nesnelerinin tüm dosya yöntemlerini uygulaması gerekmez.

Bir Dosyayı Satır Satır Okuma

İlk örnek iki programlama dilinden esinlenmiştir – C ve C++. Muhtemelen en sezgisel yaklaşımdır – dosyayı kullanarak açın. open() fonksiyonu, dosyayı satır satır oku ile readline() yöntemi ve satırı okuduktan hemen sonra çıktısını alın.

Burada kullanımda bir while sürece dosyadan sürekli okuyan döngü readline() yöntem veri döndürmeye devam eder. Dosyanın sonuna (EOF) ulaşılması durumunda, while döngü durur ve dosya nesnesi kapanır, diğer programların kullanması için kaynakları serbest bırakır:


filename = "test.txt"

filehandle = open(filename, 'r')
while True:
    
    line = filehandle.readline()
    if not line:
        break
    print(line)


filehandle.close()

Sizin de belirttiğiniz gibi, bu örnekte dosyayı açıkça açıp kapattık. Python yorumlayıcısı, Python programının yürütülmesinin sonunda açılan dosyaları otomatik olarak kapatsa da, dosyayı açıkça şu şekilde kapatır: close() iyi bir programlama stilidir ve unutulmamalıdır.

Bir iyileştirme olarak, uygun yineleyici protokolü Python 2.3'te tanıtıldı. Bu, işlemi basitleştirmenizi sağlar readline döngü:


filename = "test.txt"
for line in open(filename, 'r'):
    print(line)

Burada kullanımda bir for ile birlikte döngü in yineleyici. Mevcut hat yardımıyla tanımlanır. in yineleyici, dosyadan okunur ve içeriği stdout. Python, kapsam dışına düştüğünde dosyanın açılıp kapanmasını sizin için kapsar. Verimsiz olsa da, bu artık dosya tanıtıcılarıyla uğraşmak zorunda kalmamanızı sağlar.

Ne yazık ki, yukarıdaki kod daha az açıktır ve dosyayı kapatmayı işlemek için Python'un dahili çöp toplamasına dayanır.

Python 2.5'te tanıtılan, with komutu, tüm süreci daha da kapsüller ve ayrıca kapsamlı kod bloğu boyunca dosyaların yalnızca bir kez açılıp kapanmasını işler:


filename = "test.txt"
with open(filename, 'r') as filehandle:
    for line in filehandle:
        print(line)

Kombinasyonu with açıklama ve open() komutu dosyayı yalnızca bir kez açar. başarılı olursa for döngü yürütülür ve satırın içeriği yazdırılır. stdout.

Ayrıca, kullanım with ifadesinin yan etkisi vardır. Dahili olarak, Python yorumlayıcısı bir try-finally-dosyadan okumayı kapsüllemek için blok. Aşağıdaki örnek, Python'da esasen dahili olarak neler olduğunu gösterir. with kod blokları:

try:
    filehandle = open(filename, 'r')
    
finally:
    filehandle.close()

Bir Dosyayı Satır Parçaları Olarak Okumak

Şimdiye kadar bir dosyayı satır satır işledik. Bu, büyük dosyalar için oldukça yavaştır ve aynı anda birden çok satır okuyarak geliştirilebilir. Bunu başarmak için, islice() yöntemden yineleme araçları modül devreye giriyor. Ayrıca, yineleyici olarak çalışır ve aşağıdakilerden oluşan bir veri yığını döndürür. n çizgiler. Dosyanın sonunda sonuç daha kısa olabilir ve son olarak çağrı boş bir liste döndürür:

from itertools import islice

filename = "test.txt"

number_of_lines = 5

with open(filename, 'r') as input_file:
    lines_cache = islice(input_file, number_of_lines)
   
    for current_line in lines_cache:
        print (current_line)

Bir Dosyadan Belirli Bir Satır Okuma

Yukarıda gösterilen yöntemleri kullanarak, bir dosyadan belirli bir satırı okumak gibi başka yararlı eylemler de gerçekleştirebiliriz. Bunu yapmak için bir sayaçtan yararlanırız ve dosya üzerinde yineleme yaparken ona geldiğimizde uygun satırı yazdırırız:


filename = "test.txt"

line_number = 3
print (f"line {line_number} of {filename} is: ")

with open(filename, 'r') as filehandle:
current_line = 1
    for line in filehandle:
        if current_line == line_number:
            print(line)
            break
        current_line += 1

Bunu anlamak basit olmalı, ancak önceki örneklerden biraz daha uzun. kullanılarak kısaltılabilir. satır önbelleği modülü.

Aşağıdaki örnek, kodu kullanarak kodun nasıl basitleştirileceğini gösterir. getline() yöntem. İstenen satır numarası dosyadaki geçerli satır aralığının dışındaysa, getline() method bunun yerine boş bir dize döndürür:


import linecache

filename = "test.txt"

line_number = 3

line = linecache.getline(filename, line_number)
print (f"line {line_number} of {filename}:")
print (line)

Tüm Dosyayı Aynı Anda Okumak

Son olarak, önceki örnekten çok farklı bir duruma bakacağız – tek seferde tüm dosyayı okumak.

Karakterler çok fazla yer kaplamadığından, ancak büyük dosyalardan bıktığından, çoğu durumda tüm dosyayı okumak için yeterli belleğe sahip olmanız gerektiğini unutmayın. Aşağıdaki örnek, aşağıdakilerin bir kombinasyonunu kullanır: with beyanı ve read() yöntem. Bu durumda, kullanacağız read() dosya içeriğini veri akışı olarak yüklemek için:

En iyi uygulamalar, endüstri tarafından kabul edilen standartlar ve dahil edilen hile sayfası ile Git'i öğrenmek için uygulamalı, pratik kılavuzumuza göz atın. Googling Git komutlarını durdurun ve aslında öğrenmek o!


filename = "test.txt"

with open(filename, 'r') as filehandle:
    filecontent = filehandle.read()
    print (filecontent)

Python ayrıca şunları sunar: readlines() yöntemine benzer bir yöntemdir. readline() İlk örnekteki yöntem. Kıyasla read(), dosya içeriği, içeriğin her satırının bir öğe olduğu bir listede saklanır:


filename = "test.txt"

with open(filename, 'r') as filehandle:
    filecontent = filehandle.readlines()
    for line in filecontent:
        print (line)

Süre readlines() EOF'ye ulaşana kadar dosyadaki içeriği okuyacaktır, aşağıdakileri sağlayarak okunan içerik miktarını da sınırlayabileceğinizi unutmayın. sizehint okunacak bayt sayısı olan parametre.

Sonuç

Her zamanki gibi, bir dosyanın içeriğini okumanın birden fazla yolu vardır. Hız açısından hepsi aşağı yukarı aynı kategoride. Hangi çözümün sizin için en uygun olduğu, özel kullanım durumunuza bağlıdır. Neyin mümkün olduğunu görmenin ve ardından en uygun çözümü seçmenin oldukça yararlı olduğunu düşünüyoruz.

Python, dosyaları okuma sürecini büyük ölçüde basitleştirse de, bazen zor olabilir, bu durumda şuna bir göz atmanızı tavsiye ederim. resmi Python belgeleri Daha fazla bilgi için.

Zaman Damgası:

Den fazla Yığın kötüye kullanımı