如何仅显示第二列,并与第二个文本文件进行比较

时间:2013-05-10 12:41:30

标签: python python-2.7

我想只显示第二列

这是我的代码

with open('try.txt', 'rb') as file1:
    file1_data = dict(line.split(None, 2)[1:] for line in file1 if line.strip())
print file1_data

我只想显示第二列,但它也用它来展示第三列

这是文本文件

E5 BAT One 
E5 BALL Two 
E5 CRICKET Three 

我必须找到位于Bat文本文件

中textfile1第二列的second
    ?Bat03|Batsman
    This is the goods of cricket
    ?Balt|Bowler
    Both can be use by batsman and bowler
    ?Bat133|Swimmer
    Swiming is the best exercise

所以Bat位于textfile1的第二列,我们转到第二个文本文件并查找Bat并忽略|之后的值,如果Bat之前在第二个文本文件中找到|而不是显示它

with open('second.txt', 'rb') as file2, open('output.txt', 'wb') as outputfile:
    output = csv.writer(outputfile, delimiter='|')
    for line in file2:
        if line[:1] == '?':
            row = line.strip().split('|')
            key = row[0][1:]
            if key in file1_data:
                output.writerow(row + [file1_data])
        else:
            outputfile.write(line)

Required output

?Bat03|Batsman
        This is the goods of cricket
?Bat133|Swimmer
        Swiming is the best exercise

1 个答案:

答案 0 :(得分:3)

为什么不在拆分后对行进行索引?

line.split()[1]

而不是:

line.split(None,2)[1:]

当然,这对字典也不满意。我不确定你为什么要在那里写一个字典。如果对您来说完全相同,我建议您使用list代替。

file1_data = [line.split()[1] for line in file1 if line.strip()]

如果你真的想保留字典,那么你已经几乎得到了你想要的东西。第一列可以从file1_data.keys()构造,它返回一个可迭代的(在python2.x上它是一个列表,在python3.x上它是一个类似集合的对象)。当然,由于这是一本字典,原始文件中的所有订单都会丢失。