0

我只想显示第二列,

这是我的代码

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 第二列中的蝙蝠 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因此,我们转到第二列中的 Batsecond 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
4

1 回答 1

1

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

检索第二列的值

line.split(None, 2)[1:]返回行中的第二个和第三个项目的原因是因为它被告知这样做。[1:]在末尾使用意味着返回列表中的第二项和所有后续项(因为:and列表切片。如果您只想返回列表中的第二项,请使用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)
于 2013-05-12T08:40:31.780 回答