如果这两个文件的匹配行顺序不同,例如,如果file1中的第一行与file2中的最后一行匹配,那么除了读取一行之外,没有其他方法可以执行所需操作文件存入内存。您可以阅读它以查找匹配项,例如dict
以使其能够找到匹配O(1)
中的行。
您能否提供两个简短的示例文件来理解匹配规则?然后我会尝试为此编写一些代码。
UPDATE
既然你只提供了两个文件,两行而不是,我试图用我的想象。
我已经创建了两个文件,用下面的代码:
#!/usr/bin/python3.5
import random
with open('file1', 'w') as f1, open('file2', 'w') as f2:
for _ in range(10):
f1.write('{},{},{},{},track-{}\n'.format(*[random.randrange(5) for x in range(5)]))
f2.write('stage-{},{},{},{},{}\n'.format(*[random.randrange(5) for x in range(5)]))
文件1:
4,4,3,1,track-0
3,1,0,2,track-0
1,2,3,1,track-3
0,1,2,1,track-2
0,0,4,2,track-2
0,2,3,1,track-0
0,4,4,0,track-0
2,1,4,3,track-1
2,1,4,1,track-1
1,1,0,3,track-4
文件2:
stage-0,3,1,1,0
stage-3,2,1,0,1
stage-1,2,4,3,3
stage-0,4,0,1,3
stage-3,4,3,3,3
stage-0,0,3,2,1
stage-2,2,1,3,4
stage-4,3,1,0,3
stage-1,1,4,1,2
stage-3,0,1,3,4
接着,下面的代码:
import re
d, regex = {}, re.compile('stage-(\\d+)')
with open('file2') as f2:
for line in f2:
value = int(regex.match(line).group(1))
if value not in d: d[value] = []
d[value].append(line[:-1])
regex = re.compile('.*track-(\\d+)')
with open('file1') as f1:
for line in f1:
value = int(regex.match(line).group(1))
print(line[:-1])
if value not in d: print(' no matches')
else:
for x in d[value]: print(' MATCH: ' + x)
提供了以下的输出:
4,4,3,1,track-0
MATCH: stage-0,3,1,1,0
MATCH: stage-0,4,0,1,3
MATCH: stage-0,0,3,2,1
3,1,0,2,track-0
MATCH: stage-0,3,1,1,0
MATCH: stage-0,4,0,1,3
MATCH: stage-0,0,3,2,1
1,2,3,1,track-3
MATCH: stage-3,2,1,0,1
MATCH: stage-3,4,3,3,3
MATCH: stage-3,0,1,3,4
0,1,2,1,track-2
MATCH: stage-2,2,1,3,4
0,0,4,2,track-2
MATCH: stage-2,2,1,3,4
0,2,3,1,track-0
MATCH: stage-0,3,1,1,0
MATCH: stage-0,4,0,1,3
MATCH: stage-0,0,3,2,1
0,4,4,0,track-0
MATCH: stage-0,3,1,1,0
MATCH: stage-0,4,0,1,3
MATCH: stage-0,0,3,2,1
2,1,4,3,track-1
MATCH: stage-1,2,4,3,3
MATCH: stage-1,1,4,1,2
2,1,4,1,track-1
MATCH: stage-1,2,4,3,3
MATCH: stage-1,1,4,1,2
1,1,0,3,track-4
MATCH: stage-4,3,1,0,3
不知道这是你想要的,但我试图创建大文件,具有75K和550K线,并花了3秒钟生成他们只有一半秒解析(没有时间的控制台输出,花了几分钟,并通过评论print
s关闭)
几个澄清问题:1)你关心文件中的行的顺序?即在执行比较之前排序两个文件是否存在问题? 2)你比较“整条线对整条线”还是“线条对比线”? – Yaron
我会将数据读入数据库。 RDBMS在这种比较中速度非常快。但是,如果你想在Python中做到这一点,可以考虑给出一个最小和完整的例子。 – roadrunner66