使用python和pandas从一个非常大的文本文件中提取数据?

2024-09-27 09:34:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从一个非常大的文本文件(10Gb)中提取行。文本文件包含工程软件的输出(不是CSV文件)。我想从第1行复制到包含字符串“stop”的第一行,然后从包含“restart”的第一行继续到文件的结尾。你知道吗

下面的代码可以工作,但速度相当慢(大约一分钟)。有没有更好的方法用熊猫来做呢?我试过read\u csv函数,但没有要输入的分隔符。你知道吗

file_to_copy = r"C:\Users\joedoe\Desktop\C ANSYS R1\PATCHED\modes.txt"
output = r"C:\Users\joedoe\Desktop\C ANSYS R1\PATCHED\modes_extract.txt"
stop = '***** EIGENVECTOR (MODE SHAPE) SOLUTION *****'
restart = '***** PARTICIPATION FACTOR CALCULATION *****  X  DIRECTION'

with open(file_to_copy) as f:
    orig = f.readlines()

newf = open(output, "w")

write = True
first_time = True
for line in orig:
    if first_time == True:
        if stop in line:
            first_time = False
            write = False
            for i in range(300):
                newf.write(
                '\n  -------------------- MIDDLE OF THE FILE -------------------')
            newf.write('\n\n')
    if restart in line: write = True
    if write: newf.write(line)
newf.close()
print('Done.')

Tags: 文件tointrueiftimelinefile
2条回答

readlines遍历整个文件。然后迭代readlines的结果。我认为下面的编辑将通过这个大文件为您保存一个完整的迭代。你知道吗

write = True
first_time = True

with open(file_to_copy) as f, open(output, "w") as newf:
    for line in f:
      if first_time == True:
          if stop in line:
              first_time = False
              write = False
              for i in range(300):
                  newf.write(
                  '\n             MIDDLE OF THE FILE          -')
              print('\n\n')
      if restart in line: write = True
      if write: newf.write(line)
print('Done.')

您应该使用python生成器。打印也会使过程变慢。你知道吗

下面是使用生成器的几个示例:

Python generator to read large CSV file

Lazy Method for Reading Big File in Python?

相关问题 更多 >

    热门问题