2013-02-21 16 views
5

Burada bu soruyu gördüm, ancak verilen yanıtlar benim durumumda çalışmadı ve iki kez işaretlendi.Python dosya kitaplığı arabelleğe alınmadan nasıl sakınılır

ben kaynak kodu (/usr/lib/python3.2/fileinput.py) kazılmış ve readlines(bufsize) bir tampon yüklemek için dahili olarak kullanılan edildiğini gördük. Kabuk ya da başka boru tesisatçılığı yok.

+0

Aslında, python -u'nun istediğiniz her şeyin üzerine gelmesini isteyebilirsiniz. Stdin'deki temel Python ve/veya stdio arabelleklerini kaldırmak istersiniz ve _also_ herhangi bir üst düzey satır okuma arabelleğini kaldırır, değil mi? – abarnert

cevap

5

Benim için çalışılan sadece FileInput(bufsize=1) ayarlanıyordu. file.readlines() belgelerinde "Verilirse, isteğe bağlı boyut bağımsız değişkeni, döndürülen satırlardaki toplam bayt sayısının yaklaşık sınırıdır." Uygulamada, bir arabelleği doldurmak zorunda kalmadan, her seferinde yeni bir satır alıyorum.

with fileinput.input(bufsize=1) as f: 
    for line in f: 
     print("One line in, one line out!") 
+0

Bu, 'fileinput' 'readlines (self._bufsize)' kullandığı sürece çalışmanın gerçekten garanti altına alındığı görülüyor. Ne yazık ki, bu kendi içinde doğru bir şekilde belgelenmemiş, ancak sadece CPython 3.2'yi önemsiyorsanız, bunun olduğundan emin olabilirsiniz ve bu durumun çok ötesinde güvenli olması oldukça olasıdır, bu yüzden yeterince iyi, harika. – abarnert

+0

Eğer "IOBase.readlines" ([salt Python] (http://hg.python.org/cpython/file/3.2/Lib/_pyio.py#l497) ve [C] (http: //) üzerinden okuyorsanız hg.python.org/cpython/file/3.2/Modules/_io) uygulamalar), arabelleğin veya göz atmanın olmadığı bir anda 'read' 1 baytını çağıran 'readline 'olarak adlandırılır. Yani, bence bu cinleri ve kendi cevabını kabul etmelisin. – abarnert

+0

Ayrıca, bir dosya hatası oluşturmak istiyorsanız ['fileinput.input'] (http://docs.python.org/3/library/fileinput.html) 'bufsize''nın ne yaptığından bahsetmiyor. hiç ve dil referansının, bufsize = 1' ('stdin' den okunduğunda, 'stdin' ile okunduğunda birlikte) '' fileinput '' anlamına geldiğinin garanti edilmesi için yeterli bilgiye sahip olması gerekir. – abarnert

İlgili konular