SORU
19 Temmuz 2012, PERŞEMBE


Nasıl bir dosyayı satır satır okumak Python gerekir?

-Tarihi öncesi zamanlarda (Python 1.4) yaptık:

fp = open('filename.txt')
while 1:
    line = fp.readline()
    if not line:
        break
    print line

sonra Python:

for line in open('filename.txt').xreadlines():
    print line

önce Python uygun yineleyici protokolü 2.3 ve yapabileceği var:

for line in open('filename.txt'):
    print line

Bazı örnekler daha ayrıntılı kullanarak gördüm:

with open('filename.txt') as fp:
    for line in fp:
        print line

bu tercih edilen yöntem ileri gidiyor?

[değiştir] deyimi dosyanın kapanmasını sağlar anlıyorum... ama neden yineleyici dahil değil mi bu dosya nesneleri için protokol?

CEVAP
19 Temmuz 2012, PERŞEMBE


Tam olarak aşağıdaki tercih olmasının bir nedeni var

with open('filename.txt') as fp:
    for line in fp:
        print line

CPython nispeten deterministik başvuru sayma düzeni, çöp toplama ile şımarık. Python diğer, varsayımsal uygulamaları mutlaka "yeterince hızlı dosya kapanmaz

Böyle bir uygulama, bir açık kod dosyaları çöp toplayıcısı artık dosya üzerinde sonlandırıcı kolları aramaları daha hızlı açılır eğer" OS hata. dosyaları "çok fazla alabilirsiniz Her zamanki geçici GC hemen tetiklemek için, ama bu kötü bir hack ve ne kadar olmalıherişlev hatası, kütüphaneler de dahil olmak üzere karşılaşma olabilir. Ne bir kabus.

Ya da sadece with blok kullanabilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • boogie2988

    boogie2988

    6 NİSAN 2006
  • Bryan Smith

    Bryan Smith

    12 Mart 2006
  • paikimchung

    paikimchung

    12 Mayıs 2006