Итератор файла Python поверх двоичного файла с более новой идиомой

В Python для двоичного файла я могу написать следующее:

buf_size=1024*64           # this is an important size...
with open(file, "rb") as f:
   while True:
      data=f.read(buf_size)
      if not data: break
      # deal with the data....

С текстовый файл, который я хочу прочитать построчно, я могу написать это:

with open(file, "r") as file:
   for line in file:
       # deal with each line....

Сокращение для:

with open(file, "r") as file:
   for line in iter(file.readline, ""):
       # deal with each line....

Эта идиома задокументирована в PEP 234 , но мне не удалось найти аналогичная идиома для двоичных файлов.

Я пробовал это:

>>> with open('dups.txt','rb') as f:
...    for chunk in iter(f.read,''):
...       i+=1

>>> i
1                # 30 MB file, i==1 means read in one go...

Я попытался поместить iter (f.read (buf_size), '') , но это синтаксическая ошибка из-за скобок после вызываемого в iter ().

Я знаю, что могу написать функцию, но есть ли способ с идиомой по умолчанию для фрагмента в файле: , где я могу использовать размер буфера вместо ориентированного на строку?

Спасибо за размещение с новичком в Python, пытающимся написать свой первый нетривиальный и идиоматический скрипт Python.

24
задан dawg 30 December 2010 в 21:43
поделиться