Как и в названии - у меня много очень больших текстовых файлов (> 10 ГБ), которые имеют одинаковую повторяющуюся структуру. Я хотел бы отфильтровать некоторую информацию, поэтому я хотел бы дать каждую k-ю строку от них, но одновременно повторить их все. Я пробовал itertools: islice и izip, но я не могу их собрать ...Python: Итерации по многим большим файлам одновременно, получить каждую k-ю строку
1
A
ответ
2
Учитывая, что вы говорите об использовании itertools.izip()
, я собираюсь предположить, что вы используете Python 2 здесь.
Использование itertools.islice()
для облегчения пропуска строки из файлов, а itertools.izip_longest()
function лениво совмещать чтение параллельно, а также работать с файлами, которые короче:
from itertools import islice, izip_longest
filenames = [fname1, fname2, fname3]
open_files = [open(fname) for fname in filenames]
kth_slice_files = (islice(f, None, None, k) for f in open_files)
try:
for kth_lines in izip_longest(*kth_slice_files, fillvalue=''):
# do something with those combined lines
islice(fileobj, None, None, k)
начнется в линии первый, затем пропустить k - 1
строк, чтобы дать вам 1 + k, затем 1 + 2 * k и т. Д. Строки. Если вам нужно начать с более поздней строки, замените первое None
на это начальное значение.
Включите вашу попытку; гораздо более продуктивно указывать вашу конкретную ошибку, чем повторять то, что вы уже выяснили. –
Вы можете разделить эту задачу на три подзадачи, сначала - перебирать файлы с использованием многопроцессорности и хранить k-ые строки в отдельных файлах, во-вторых - объединить все файлы в один и, наконец, третье - выполнить итерацию на выходе второго шага и выход Результаты. – vovaminiof
@vovaminiof: это тривиально разрешимо только с помощью 'itertools'. –