Python 3:如何最快地比较两个大文件?
在“Big_file.txt”中,我想提取“用户A”的UID,它不会与“Small_file.txt”中的UID重复。我写了以下代码,但它似乎永远不会停止运行。那么,如何加快这一进程呢?非常感谢:) 这是Big_file.txt的格式(有1000万行): 这是Small_file.txt的格式(有几百万行): 我期望的结果是:Python 3:如何最快地比较两个大文件?,python,json,hash,compare,Python,Json,Hash,Compare,在“Big_file.txt”中,我想提取“用户A”的UID,它不会与“Small_file.txt”中的UID重复。我写了以下代码,但它似乎永远不会停止运行。那么,如何加快这一进程呢?非常感谢:) 这是Big_file.txt的格式(有1000万行): 这是Small_file.txt的格式(有几百万行): 我期望的结果是: 111 222 在列表中查找项目需要O(n)时间。如果使用dict或set可以将其改进为O(1) 您可以做的最短修改是: linesB = [] for line in
111
222
在列表中查找项目需要
O(n)
时间。如果使用dict
或set
可以将其改进为O(1)
您可以做的最短修改是:
linesB = []
for line in open('E:/Small_file.txt'):
line = json.loads(line)
linesB.append(hash(line['uid']))
linesB = set(linesB)
还是要把它做好
linesB = set()
for line in open('E:/Small_file.txt'):
line = json.loads(line)
linesB.add(hash(line['uid']))
使用字典,您将大大加快
不在
中执行的查找速度。您可以使用集
而不是列表
来附加值,以跳过检查是否存在重复项。@spectras and vishes_shell非常感谢您的帮助:)在集中
或dict
中查找项具有平均复杂性O(1)。退房所以你的解决方案比你想象的还要好:)谢谢你的评论。我来自C++背景,我经常犯这个错误。C++中肯定有同样的错误,实际上,Cython解释器是用C编写的。他们只是选择了一个不同的实现,用于<代码> DICT<代码>,使用哈希表。它的主要优点是查找速度非常快,但在其他操作中显然需要付费,最明显的是在插入时出现“非常糟糕”的最坏情况。太棒了!目前,我的程序运行得非常快:D
111
222
linesB = []
for line in open('E:/Small_file.txt'):
line = json.loads(line)
linesB.append(hash(line['uid']))
linesB = set(linesB)
linesB = set()
for line in open('E:/Small_file.txt'):
line = json.loads(line)
linesB.add(hash(line['uid']))