Python文件匹配与行打印
多亏了Carles Mitjans,我尝试扩展下面的代码,这样,如果文件1和文件2之间存在匹配,即文件2中的12345和文件1中的12345,它将打印完整的行,包括两个文件之间匹配的路径 然而,我似乎无法将交叉点改变为允许这样做的东西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
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。这样做就成功了,感谢您在中添加了最后一部分,我们没有取得任何进展!