В 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.