python3:如何最快比较两个大文件?

2024-06-25 06:25:50 发布

您现在位置:Python中文网/ 问答频道 /正文

“大_文件.txt“,我想提取”用户A“的UID,该UID与“Small”中的UID不重复_文件.txt”。我写了下面的代码,但它似乎永远不会停止运行。那么,如何加快这一进程呢?非常感谢:)

import json

uid_available = []
linesB = []
for line in open('E:/Small_file.txt'):
    line = json.loads(line)
    linesB.append(hash(line['uid']))


for line in open('E:/Big_file.txt'):
    line = json.loads(line)
    if hash(line['uid']) not in linesB and line['user'] == 'User A':
        uid_available.append(line['uid'])

这是大的格式_文件.txt(有1000万行):

{'uid': 111, 'user': 'User A'}
{'uid': 222, 'user': 'User A'}
{'uid': 333, 'user': 'User A'}
{'uid': 444, 'user': 'User B'}
{'uid': 555, 'user': 'User C'}
{'uid': 666, 'user': 'User C'}

这是小号的格式_文件.txt(有几百万行):

{'uid': 333, 'user': 'User A'}
{'uid': 444, 'user': 'User B'}
{'uid': 555, 'user': 'User C'}

我期望的结果是:

111
222

Tags: 文件intxtjsonforuidlineopen
1条回答
网友
1楼 · 发布于 2024-06-25 06:25:50

在列表中查找项目需要O(n)时间。如果使用dictset,可以将其改进为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']))

相关问题 更多 >