Вы можете использовать генератор, чтобы сгруппировать строки и получить их так, чтобы их было удобно использовать в простом цикле for.Это может привести к началу работы:
def chunks_of(iterable, chunk_size=500):
out = []
for item in iterable:
out.append(item)
if len(out) >= chunk_size:
yield out
out = []
if out:
yield out
Затем вы можете использовать это как:
for chunk_of_lines in chunks_of(file('/path/to/file'), chunk_size=500):
# chunk_of_lines is 500 or fewer lines from the file
(Почему "500 или меньше"? Потому что последний блок может быть не 500 строк, есликоличество строк в файле не кратно 500.)
Редактировать: Всегда сначала проверяйте документы.Вот рецепт из документов itertools
def grouper(n, iterable, fillvalue=None):
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
Это создает список из n итераторов для итерируемого (в данном случае, файлового объекта) - так каквсе они являются итераторами одного и того же базового объекта, когда один продвигается, все остальные тоже продвигаются - и затем архивируют свой результат.izip_longest
работает как izip
, но добавляет результаты к fillvalue
, а не просто пропускает их, как моя функция chunks_of
.