Пропускать определенные строки в большом текстовом файле, используя Python - PullRequest
0 голосов
/ 25 мая 2020

У меня большой текстовый файл (несколько ГБ). Я хочу пропустить фиксированное количество строк, которые повторяются в моем текстовом файле несколько раз. Я написал следующий код, который тоже работает. Мне просто интересно, может ли кто-нибудь предложить более эффективный способ решения этой задачи.

coordinate = []
with open('Lammps_D.txt', 'r') as file:
    data = file.readlines()
    data_iter = iter(data)
    for lines in data_iter:
        if lines[0] == "I":
            next(data_iter)
            next(data_iter)
            next(data_iter)
            next(data_iter)
            next(data_iter)
            next(data_iter)
            next(data_iter)
            next(data_iter)
        else:
            coordinate.append(lines)

Ответы [ 2 ]

1 голос
/ 25 мая 2020

Чтение всех строк одновременно и последующее преобразование в итератор может быть менее эффективным, чем просто использование файлового объекта в качестве итератора с использованием readline.

coordinate = []
with open('Lammps_D.txt', 'r') as file:
    line=file.readline()
    while line:
      if line[0]=='I':
        for i in range(9): line=file.readline()
      else:
        coordinate.append(line)
        line=file.readline()
0 голосов
/ 25 мая 2020

Насколько я понял, вы пропускаете повторяющиеся строки, поэтому все строки, которые вы пропускаете, удовлетворяют условию if lines[0] == "I" В этом случае вы можете использовать itertools.filterfalse

from itertools import filterfalse

with open('Lammps_D.txt', 'r') as file:
    data = file.readlines()
    coordinate = filterfalse(lambda x: x[0] == "I", data)

Координата теперь является генератором, если вы хотите, чтобы она была в виде списка, просто добавьте

coordinate = list(coordinate)
...