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

  • Alfredo Garcia

    Alfredo Garc

    25 Mayıs 2007
  • DJPixcell

    DJPixcell

    20 NİSAN 2007
  • PorterRobinsonVEVO

    PorterRobins

    11 Kasım 2013