多个列表与python中的文件行进行比较

时间:2017-05-12 11:12:50

标签: python python-2.7 list

代码(不完整):

list1 = ['1', '2', '3']
list2 = ['a', 'b', 'c']
list3 = ['12' '13' '14']
for list_in in list1:
    with open("buffer_file") as f:
        for line in f:
            if len(line.split(" ")) >= 3:
                var1 = line.split(" ")
                if var1[0] == list1[0] and var[1] == list2[0] and var[3] == list3[0]:

buffer_file

no
priority enabled
1 a 12  
2 b 13
3 d 14
pump it

我在这里尝试的是,如果匹配文件行和列表值,则匹配打印文件行。

示例1:

 list1[0], list2[0], list3[0]

与包含1 a 12值的行匹配,因此请打印matched

示例2:

 list1[1], list2[1], list3[1]

与包含2 b 13值的行匹配,因此请打印matched

示例3:

list1[2], list2[2], list3[2]

不匹配,因为包含3 d 12值的行打印不匹配,并且打印不匹配的元素d

任何人请建议我完成这项工作的最佳方法是什么。我对代码中间感到震惊。

2 个答案:

答案 0 :(得分:1)

您可以zip三个列表,以便您可以抓取并检查其值是对齐元素的三元组。

expected = zip(list1, list2, list3)
print expected 
[ ('1', 'a', '12'), ('2', 'b', '13'), ... ]

如果文件中的行与列表元素一对一匹配,则可以再次使用zip()循环显示预期值和实际值。 zip()是你的朋友。 (如果文件有额外的行,请使用变量向下走三元组列表。)

with open("buffer_file") as f:
    for exp, actual in zip(expected, f):
        if exp == actual.split():   # compares two 3-tuples
           <etc.>

答案 1 :(得分:0)

在这里读一下这几行。基本上是你要忽略的声音行所有行都不是三元组,枚举文件并在原始列表中找到匹配项。

values = [
    ['1', '2', '3'],
    ['a', 'b', 'c'],
    ['12', '13', '14'],
]

def triples(line):
    return len(line.split()) >= 3


with open("test_file.txt") as f:
    content = filter(triples, (map(str.strip, f.readlines())))
    # Loop over the file keeping track of index
    for index, line in enumerate(content):
        # Compare split line and triples
        if line.split() == list(map(itemgetter(index), values)):
            print(line)

给我,“test_file.txt”包含您列出的输入

1 a 12
2 b 13