我有一个大的文本文件(几GB)。我想跳过固定数量的行,这些行在我的文本文件中重复了几次。我写了下面的代码,也能正常工作。我只是想知道是否有人能提出一个更有效的方法来完成这个任务。
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)
一次性读取所有的行,然后转换成迭代器,可能比单纯使用文件对象作为迭代器的效率要低,用 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()
据我所知,你跳过了重复的行,所以你跳过的所有行都满足了条件 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)