如果這兩個文件的匹配行順序不同,例如,如果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