【发布时间】:2019-11-30 17:10:35
【问题描述】:
我正在尝试比较两个大文件:b.txt 包含超过 2000 万行,a.txt 包含 50.000 行。以传统方式比较它们需要太多时间。例如以下代码在 5 小时内没有完成:
b = [line.rstrip('\n') for line in open("b.txt")]
a = [line.rstrip('\n') for line in open("a.txt")]
for i in a:
for j in b:
if i in j:
print(j)
我在 Stackoverflow 中看到了针对类似问题的以下建议:
with open('b.txt') as b:
blines = set(b)
print(blines[0])
with open('a.txt') as a:
for line in a:
if line in blines:
print(line)
set() 函数运行速度非常快,代码在几秒钟内终止。但是,我需要在包含line 变量的blines 中找到确切的字符串。由于索引无法访问set(),因此我无法实现。有没有办法找到匹配的字符串,或者你有什么其他建议可以让这个比较比第一个代码更快。
【问题讨论】:
-
您使用的是什么操作系统?你需要用
python来实现这个吗? -
或者你可以使用二分搜索
-
我使用的是 macOS 和 Windows。不,不一定是Python,我只知道python
-
可以对大文件
b.txt进行预处理(排序、索引...)吗?与在大型未索引文件中搜索随机字符串相比,这可以大大提高您的搜索速度。 -
是的,我们可以以任何我们想要的方式处理 b.txt 文件
标签: python substring string-matching