Python文件匹配与行打印

Python文件匹配与行打印,python,python-2.7,Python,Python 2.7,多亏了Carles Mitjans,我尝试扩展下面的代码,这样,如果文件1和文件2之间存在匹配,即文件2中的12345和文件1中的12345,它将打印完整的行,包括两个文件之间匹配的路径 然而,我似乎无法将交叉点改变为允许这样做的东西 file1 example file2 example 12345 /users/test/Desktop 543252 54321 /users/test/Downloads 12345 000

多亏了Carles Mitjans,我尝试扩展下面的代码,这样,如果文件1和文件2之间存在匹配,即文件2中的12345和文件1中的12345,它将打印完整的行,包括两个文件之间匹配的路径

然而,我似乎无法将交叉点改变为允许这样做的东西

file1 example                    file2 example
12345 /users/test/Desktop        543252 
54321 /users/test/Downloads      12345  
0000  /users/test/Desktop        11111
                                 0000


with open('Results.txt', 'r') as file1:
    with open('test.txt', 'r') as file2:
        a = set(x.split()[0] for x in file1)
        b = [x.rstrip() for x in file2]
        same = a.intersection(b)
        for line in same:
            print line

same.discard('\n')
它目前的产出 12345 万

我们将感激地接受任何指导意见。

使用dict将线映射到匹配的术语。另外,不需要嵌套这两个循环。它们可以单独计算,以加快处理速度

a = set()
map = {}
with open('Results.txt', 'r') as file1:
    for x in file1:
        splits = x.split()
        a.add(splits[0])
        map[splits[0]] = x

b = []
with open('test.txt', 'r') as file2:
    b = [x.rstrip() for x in file2]

same = a.intersection(b)
same.discard('\n')

for keyItem in same:
    print map[keyItem]   
OP注意到,上述解决方案将只打印最后一个匹配项。 更改地图可以解决此问题

map = dict()
with open('Results.txt', 'r') as file1:
    for x in file1:
        splits = x.split()
        a.add(splits[0])

        # If the key is not present, initialize it
        if splits[0] not in map:
            map[splits[0]] = []
        # Append the line to map value
        map[splits[0]].append(x)

其他事情将保持不变

几乎完美谢谢,唯一的问题是,当有几个文件具有相同的名称和不同的路径时,它将只打印出该文件的第一个实例,是否有办法修改此方法以打印出不同文件的所有详细信息,即,如果有4个实例具有12345但路径/用户/测试不同。。。。。。。users/test1和users/test2所有要打印的内容都只会是第一个。希望这是有意义的。它将打印我猜的姓氏,因为dict值将被替换。在这种情况下,我们可以使用string-to-set-of-string-dict,而不是使用简单的string-to-string-dict。这样做就成功了,感谢您在中添加了最后一部分,我们没有取得任何进展!