【问题标题】:Skip certain lines in a big text file using Python使用 Python 跳过大文本文件中的某些行
【发布时间】:2020-05-25 10:21:48
【问题描述】:

我有一个大文本文件(几 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)

【问题讨论】:

    标签: python-3.x for-loop text-files


    【解决方案1】:

    一次读取所有行然后转换为迭代器可能不如使用文件对象作为迭代器使用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()
    

    【讨论】:

      【解决方案2】:

      据我了解,您跳过重复的行,因此您跳过的所有行都满足条件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)
      

      【讨论】:

      • 我跳过的所有行都不以“I”开头。当我到达以“I”开头的一行时,我会跳过该行以及后面的 7 行,它们可能具有不同的初始字符。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-13
      • 2021-03-22
      • 1970-01-01
      • 2017-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多