Как читать файлы N строк за раз в Python?

Мне нужно прочитать большой файл, читая не более N строк за раз, до EOF. Каков наиболее эффективный способ сделать это в Python? Что-то вроде:

with open(filename, 'r') as infile: while not EOF: lines = [get next N lines] process(lines) 

  • подписывать определенную строку из csv-читателя python?
  • Как убедиться, что файл существует или может быть создан до его написания в Python?
  • Разница между разбором текстового файла в режиме r и rb
  • Как добавить новые данные на новую строку
  • Python: найдите новый файл с расширением .MP3 в каталоге
  • Как открыть файл с помощью оператора open with
  • Может ли Python удалять двойные кавычки из строки при чтении в текстовом файле?
  • Python pickle / unpickle список в / из файла
  • 7 Solutions collect form web for “Как читать файлы N строк за раз в Python?”

    Одним из решений было бы понимание списка и оператор среза:

     with open(filename, 'r') as infile: lines = [line for line in infile][:N] 

    После этого lines являются кортежами строк. Однако это приведет к загрузке полного файла в память. Если вы не хотите этого (т. islice Если файл может быть действительно большим), есть другое решение, использующее выражение генератора и islice из пакета itertools:

     from itertools import islice with open(filename, 'r') as infile: lines_gen = islice(infile, N) 

    lines_gen – это объект-генератор, который дает вам каждую строку файла и может использоваться в цикле следующим образом:

     for line in lines_gen: print line 

    Оба решения дают вам до N строк (или меньше, если файл не так много).

    Файловый объект является итератором по строкам в Python. Чтобы перебрать по файлу N строк за раз, вы можете использовать рецепт grouper () itertools ' (см. « Какой самый« питонический »способ перебора списка в кусках? ):

     #!/usr/bin/env python2 from itertools import izip_longest def grouper(iterable, n, fillvalue=None): args = [iter(iterable)] * n return izip_longest(*args, fillvalue=fillvalue) 

    пример

     with open(filename) as f: for lines in grouper(f, N, ''): assert len(lines) == N # process N lines here 

    Этот код будет работать с любым количеством строк в файле и любым N Если у вас 1100 lines в файле и N = 200 , вы получите 5 раз, чтобы обработать куски 200 строк и один раз со 100 строками.

     with open(filename, 'r') as infile: lines = [] for line in infile: lines.append(line) if len(lines) > N: process(lines) lines = [] if len(lines) > 0: process(lines) 

    Как насчет цикла for?

     with open(filename, 'r') as infile: while not EOF: lines = [] for i in range(next N lines): lines.append(infile.readline()) process(lines) 

    может быть:

     for x in range(N): lines.append(f.readline()) 

    Я думаю, вы должны использовать куски вместо указания количества строк для чтения. Это делает ваш код более надежным и универсальным. Даже если строки большие, использование куска будет загружать только заданный объем данных в память.

    См. Эту ссылку

    Возможно, вам придется сделать что-то простое:

     lines = [infile.readline() for _ in range(N)] 

    Обновление после комментариев:

     lines = [line for line in [infile.readline() for _ in range(N)] if len(line) ] 
    Interesting Posts

    Установка тета-тиков в полярных графиках matplotlib

    Бинарная функция поиска Python для поиска первого числа в отсортированном списке, превышающем конкретное значение

    Как предотвратить конфликты приборов с конфликтом с сигнальным кодом django post_save?

    как объединить два вложенных словаря под одним и тем же словарем

    не удалось установить __main __.__ loader__ в Python

    Python – не следует перенаправлять только по одному URL-адресу

    Продукт элементов массива по группам в numpy (Python)

    как заставить argparse читать аргументы из файла с опцией, а не префиксом

    python: проверьте, существует ли url для jpg

    Сравнение скорости несогласованного регулярного выражения

    Как применить маску в форме диска к массиву numpy?

    Pythonanywhere устанавливает и импортирует новый модуль

    Как определить, относится ли число к определенному диапазону в Python?

    3D-расчет расстояний с GeoDjango

    как форматировать определенные ячейки в excel с помощью пакета xlsx в python

    Python - лучший язык программирования в мире.