我有两个文件,都非常大。文件之间混合了信息,我需要比较两个文件并连接相交的行。
一个例子是:
第一个文件有
var1:var2:var3
第二个会有
var2:var3:var4
我需要在输出的第三个文件中连接它们:var1:var2:var3:var4
。
请注意,这些行不匹配,var4应该与var1一致(因为它们一起有var2
和var3
)。 Var2和Var3对于Var1和Var4是通用的。可能在这些巨大的文件中很远。
我需要找到一种比较每一行并将其连接到第二个文件中的方法的方法。我似乎无法想到任何适当的循环。有什么想法吗?
答案 0 :(得分:1)
请尝试以下操作(假设var2:var3
始终是两个文件中的唯一键):
var2:var3
为关键字(var1
为值)var2:var3
的条目,以及它是否输出var1:var2:var3:var4
到输出文件中并从字典中删除条目。这种方法可能会占用大量内存,因此不应该用于非常大的文件。
答案 1 :(得分:0)
根据您说要匹配的特定字段(文件1中的2& 3,文件2中的1& 2):
#!/usr/bin/python3
# Iterate over every line in file1.
# Iterate over every line in file2.
# If lines intersect, print combined line.
with open('file1') as file1:
for line1 in file1:
u1,h1,s1 = line1.rstrip().split(':')
with open('file2') as file2:
for line2 in file2:
h2,s2,p2 = line2.rstrip().split(':')
if h1 == h2 and s1 == s2:
print(':'.join((u1,h1,s2,p2)))
这是可怕的慢(理论上),但使用最少的RAM。如果文件不是非常庞大,那么它可能执行得不是很糟糕。
答案 2 :(得分:0)
如果内存不存在问题,请使用字典,其中键与值相同:
#!/usr/bin/python
out_dict = {}
with open ('file1','r') as file_in:
lines = file_in.readlines()
for line in lines:
out_dict[line] = line
with open ('file2','r') as file_in:
lines = file_in.readlines()
for line in lines:
out_dict[line] = line
with open ('output_file','w') as file_out:
for key in out_dict:
file_out.write (key)