In Python, per un file binario, posso scrivere questo:Python file di iteratore su un file binario con le nuove idioma
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....
Con un file di testo che voglio leggere riga per riga, non posso scrivere questo:
with open(file, "r") as file:
for line in file:
# deal with each line....
il che è una scorciatoia per:
with open(file, "r") as file:
for line in iter(file.readline, ""):
# deal with each line....
questo idioma è documentato in PEP 234 ma ho Faile d per individuare un linguaggio simile per i file binari.
Ho provato questo:
>>> 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...
Ho provato a mettere iter(f.read(buf_size),'')
ma che è un errore di sintassi causa delle parentesi dopo la richiamabile in iter().
So che potrei scrivere una funzione, ma esiste l'idioma predefinito di for chunk in file:
in cui posso utilizzare una dimensione del buffer rispetto a una linea orientata?
Grazie per aver sopportato il principiante Python mentre cercava di scrivere il suo primo script Python non banale e idiomatico.
Avevo pensato che esistesse un modo integrato che stavo semplicemente trascurando. Poiché non sembra esserci un modo integrato, questo è facile da leggere e diretto. Grazie! – dawg