0

2列目だけ表示したいのですが、

これは私のコードです

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

2番目のテキストファイルのtextfile1の2番目の列にある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

したがって、2 番目の列にある Bat は、Bat03 と Bat133 を見つけて、値をtextfile1無視します。second text file|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

2 つの別々の問題があります。最初はあなたのタイトルのものです - 2番目の列の値だけを取得する方法。

2 番目の列の値を取得する

行の 2 番目と 3 番目の項目の両方を返す理由line.split(None, 2)[1:]は、そうするように指示されているためです。を最後に使用[1:]すると、リストの 2 番目の項目と後続のすべての項目が返されます (:リストのスライスのためです。リストの 2 番目の項目だけを返したい場合は、 を使用しますline.split(None, 2)[1]

別のファイルの行をテストする

2 番目の問題は、最初のファイルの値を使用して 2 番目のファイルの値をテストする方法です。現在のコードはほとんどの場合これを行っているようですが、「説明」行と呼ばれるものをキャプチャするコードがありません。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 に答える