两个列表,如果找到共同的匹配项,则打印另一个列表元素

2024-04-25 00:55:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个文本文件,格式是。在

File 1  
Column A    Column B      

File 2  
Column B    Column C  

在文件2中,B列只是文件1中数据的子集。在

我想搜索文件1,如果在文件2中找到B列数据点的匹配项,则打印a列的值。在

有谁能给我一个简单的建议吗?最好是Python或Bash。在

非常感谢。在

一个例子

^{pr2}$

将打印:

Bruce  
Adam

Tags: 文件数据bash格式column建议子集例子
3条回答

你试过什么?在

下面是算法的一个想法:

  1. 检索文件A中的行将它们存储到变量foo
  2. 检索文件B中的行将它们存储到变量bar
  3. 使用空格将变量foo拆分为foosplited
  4. 使用空格将变量bar拆分为barsplited
  5. 执行一个循环:对于foosplited中奇数i索引的每个元素,如果相同,请查看barsplited中以偶数为索引的元素。如果相同,转到6;否则,转到7
  6. 打印foosplited[i-1]
  7. 继续循环
  8. 停止

这很容易通过使用字典来实现

  1. 从第二个文件创建元素字典。将每行拆分为key:value对。在
  2. 对于第一个文件中的每一行,再次将其拆分为Key:value并在字典中搜索该值
  3. 如果找到,请从您正在迭代的第一个文件中打印该值

示例实现

from itertools import imap
file2 = dict(imap(str.split, open("file2")))
with open("file1") as fin:
    for key, value in imap(str.split, fin):
        if value in file2:
            print key

操作注意事项

如果由于未显式关闭文件句柄而担心资源泄漏,请将第一条语句括在with子句中

^{pr2}$
dict1 = {}

for line in file1:
    # The 2nd word will be the key, the 1st will be the value
    words = line.split()
    dict1(words[1]) = words[0]

for line in file2:
    words = line.split()
    if dict1.has_key(words[0]):
        print words[1]

相关问题 更多 >