从两个文件连接相似的行

时间:2014-01-11 06:31:33

标签: python

我有两个文件,都非常大。文件之间混合了信息,我需要比较两个文件并连接相交的行。

一个例子是:

第一个文件有

var1:var2:var3

第二个会有

var2:var3:var4

我需要在输出的第三个文件中连接它们:var1:var2:var3:var4。 请注意,这些行不匹配,var4应该与var1一致(因为它们一起有var2var3)。 Var2和Var3对于Var1和Var4是通用的。可能在这些巨大的文件中很远。 我需要找到一种比较每一行并将其连接到第二个文件中的方法的方法。我似乎无法想到任何适当的循环。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

请尝试以下操作(假设var2:var3始终是两个文件中的唯一键):

  1. 迭代第一个文件中的所有行
    • 将所有条目添加到dictionary,其中值var2:var3为关键字(var1为值)
  2. 迭代第二个文件中的所有条目
    • 查看第1部分中的字典是否包含密钥var2:var3的条目,以及它是否输出var1:var2:var3:var4到输出文件中并从字典中删除条目。
  3. 这种方法可能会占用大量内存,因此不应该用于非常大的文件。

答案 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)