将第二列字与其他文本文件进行比较

时间:2013-05-11 07:40:56

标签: 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
E5 Bat03 Four
E5 Bat133 Five

我必须在第二个文本文件中找到位于textfile1第二列的Bat Secondtextfile

?Bat03|Batsman
This is the goods of cricket
Usually cricketers use it
it is game
?Balt|Bowler
Both can be use by batsman and bowler
?Bat133|Swimmer
Swiming is the best exercise

所以在textfile1的第二列中的Bat我们转到second text file并找到Bat03和Bat133并忽略|之后的值,如果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)

必需的输出

?Bat03|Batsman
        This is the goods of cricket
        This is the goods of cricket
        Usually cricketers use it
        it is game
?Bat133|Swimmer
        Swiming is the best exercise

1 个答案:

答案 0 :(得分:1)

您有两个不同的问题。第一个是标题中的一个 - 如何获得第二列的值。

检索第二列的值

line.split(None, 2)[1:]返回行中第二项和第三项的原因是因为它被告知这样做。最后使用[1:]表示返回列表中的第二项和所有后续项(由于:list slicing。如果您只想返回列表中的第二项,使用line.split(None, 2)[1]

测试另一个文件中的行

您的第二个问题是如何使用第一个文件中的这些值来测试第二个文件中的值。您当前的代码似乎在大多数情况下都是这样做的,但是您没有任何代码来捕获可能被称为“描述”行的代码。此外,我们还不清楚为什么要使用csv.writer创建一个看似不是.csv格式的文件。

with open('second.txt', 'rb') as file2, open('output.txt', 'wb') as outputfile:
    output = ""
    file2lines = file2.readlines()
    for i in range(len(file2lines)):
        line = file2lines[i]
        if line[0] == '?':
            row = line.strip().split('|')
            key = row[0][1:]
            if key in file1_data:
                output += line + "\t" + file2lines[i+1]
    outputfile.write(output)