我目前正在尝试从大型文本文件中删除大多数行,并将所选信息重写为另一个。我必须逐行阅读原始文件,因为这些行出现的顺序是相关的。到目前为止,我能想到的最好的方法是只拉相关的行,并使用类似以下内容的方法重写它们:
with open('input.txt', 'r') as input_file:
with open('output.txt', 'w') as output_file:
# We only have to loop through the large file once
for line in input_file:
# Looping through my data many times is OK as it only contains ~100 elements
for stuff in data:
# Search the line
line_data = re.search(r"(match group a)|(match group b)", line)
# Verify there is indeed a match to avoid raising an exception.
# I found using try/except was negligibly slower here
if line_data:
if line_data.group(1):
output_file.write('\n')
elif line_data.group(2) == stuff:
output_file.write('stuff')
output_file.close()
input_file.close()
但是,使用〜1Gb文件和〜120,000条匹配的行,该程序仍需要花费约8个小时才能运行。我相信瓶颈可能涉及到正则表达式或输出位,因为完成此脚本所花费的时间与行匹配数成线性比例。
我曾尝试先将输出数据存储在内存中,然后再将其写入新的文本文件,但快速测试表明它以与之前写入数据大致相同的速度存储数据。
如果有帮助,我有一个Ryzen 5 1500和8Gb的2133 Mhz RAM。但是,我的RAM使用率似乎从未达到上限。
相关分类