gpt4 book ai didi

python - 使用Python 3优化去除线条

转载 作者:行者123 更新时间:2023-11-30 22:11:59 25 4
gpt4 key购买 nike

我目前正在尝试从大型文本文件中删除大部分行并将所选信息重写到另一个文件中。我必须逐行读取原始文件,因为行出现的顺序是相关的。到目前为止,我能想到的最好方法仅提取相关行并使用以下内容重写它们:

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()

但是,该程序仍然需要约 8 小时才能运行约 1Gb 文件和约 120,000 条匹配行。我相信瓶颈可能涉及正则表达式或输出位,因为完成此脚本所需的时间与行匹配的数量呈线性关系。

我尝试先将输出数据存储在内存中,然后再将其写入新的文本文件,但快速测试表明,它存储数据的速度与之前写入数据的速度大致相同。

如果有帮助的话,我有 Ryzen 5 1500 和 8Gb 2133 Mhz RAM。然而,我的 RAM 使用似乎永远不会达到上限。

最佳答案

您可以将内部循环移至仅在需要时运行。现在,您正在为大文件中的每一行循环遍历 data,但仅在匹配时使用 stuff 变量。因此,只需将 for stuff in data: 循环移动到实际使用它的 if block 内部即可。

for line in input_file:
# 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:
for stuff in data:
if line_data.group(1):
output_file.write('\n')

elif line_data.group(2) == stuff:
output_file.write('stuff')

关于python - 使用Python 3优化去除线条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51251909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com