【发布时间】:2020-02-12 14:20:50
【问题描述】:
我有两个文件,file1.txt 是这样的:
aaaa
cccc
ffff
gggg
file2.txt 看起来像这样:
aaaa text1
some_random_text_A
bbbb text2
some_random_text_B
cccc text3
some_random_text_C
dddd text4
some_random_text_D
eeee text5
some_random_text_E
ffff text6
some_random_text_F
gggg text7
some_random_text_G
hhhh text8
some_random_text_H
我开发了一些 Python 代码,它使用 file1.txt 的内容来子集 file2.txt,这样如果在 file2 中找到来自 file1 的字符串,则包含该字符串的 file2 行以及下一行被打印到输出。这是我的代码:
import re
nums=set()
with open("file1.txt") as file1:
for line in file1:
nums.add(line.strip())
with open("file2.txt") as file2, open("out.txt", "wt") as
outfile:
line = file2.readline()
while line:
line = line.strip()
if any(re.match(f"^{word}\\b", line) for word in nums):
outfile.write(line + "\n")
line = file2.readline()
if line:
outfile.write(line)
else:
outfile.write("\n")
break
line = file2.readline()
这段代码给了我想要的结果,但是有两个问题:
1) 实际上 file1.txt 和 file2.txt 包含数百万行,并且这段代码完成任务非常慢,即使 file1.txt 被分解以创建多个较小的作业
2) 打印到 out.txt 的输出在作业完成之前是不可见的,因此很难监控进度,如果作业在完成之前中断,那么 out.txt 将为空
是否有另一种更快/更高效的方法来完成这项任务?谢谢!
【问题讨论】:
-
听起来您需要
pandas,然后只需对您的数据执行join
标签: python