В 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().
Я знаю, что могу написать функцию, но есть ли способ с идиомой по умолчанию for chunk in file:
, где я могу использовать размер буфера в сравнении с ориентированной линией?
Спасибо, что поделился с новичком Python, который пытался написать свой первый нетривиальный и идиоматический Python script.