0

これは簡単であることはわかっていますが、私はPythonが初めてなので、値と列をファイルに追加する際に問題が発生しました。2 つのファイルがあり、一致する行を見つけたいと考えています。行が一致する場合は値 1 の新しい列が必要であり、一致しない場合は 0 を取得する必要があります。これは file-1 または outPut に書き込む必要があります。値の追加に問題があります。

ここまで私のコード:

# -*- coding: utf8 -*-

f1 = open('text-1.txt', 'r')
f2 = open('text-2.txt', 'r')

fileOne= f1.readlines()
fileTwo = f2.readlines()

outPut = open('output.txt', 'w')

for x,y in zip(fileOne,fileTwo):
    if x==y:
        outPut.write("\t".join(x) + 1)

    else:
        outPut.write("\t".join(x) + 0)


f1.close()
f2.close()
outPut.close

これを行うためのより簡単な方法はありますか?

ありがとう

4

1 に答える 1

1

あなたが今持っているように、あなたのコードはエラーを生成します: TypeError: cannot concatenate 'str' and 'int' objects. このエラーは"\t".join(x) + 1、 の結果がjoin文字列であり1、整数であるため、 を実行すると発生します。数値を引用符で囲む必要があります。outPut.write("\t".join(x) + "1")

これでコードが実行されます。これらのファイルを入力として使用します。

テキスト-1.txt

foo
bar
baz

テキスト-2.txt

qux
bar
qux

出力は次のとおりです。

f   o   o   
0b  a   r   
1b  a   z0

これはおそらくあなたが望むものではありません。最初に表示されたとおりの各行が必要だと思います。その後にタブが続き、その後に 1 または 0 が続きます。それが必要な場合は、それoutPut.write("\t".join(x) + "1")を行う方法ではありません。"\t".join(x)元のテキストのすべての文字の間にタブ文字を挿入します。変更されていないテキストとタブと番号が必要な場合は、 を実行しますoutPut.write(x + "\t1")

出力は次のとおりです。

foo
    0bar
    1baz    0

これはより近いです - すべての文字の間にタブがなくなりましたが、数字が間違った行に表示されています. これは、末尾の改行を含むx元の行の内容であるためです。番号を改行の前に表示したい場合は、改行を取り除き、最後に新しいものを追加する必要があります。outPut.write(x.rstrip() + "\t1\n")

f1 = open('text-1.txt', 'r')
f2 = open('text-2.txt', 'r')

fileOne= f1.readlines()
fileTwo = f2.readlines()

outPut = open('output.txt', 'w')

for x,y in zip(fileOne,fileTwo):
    if x==y:
        outPut.write(x.rstrip() + "\t1\n")

    else:
        outPut.write(x.rstrip() + "\t0\n")


f1.close()
f2.close()
outPut.close()

出力は次のとおりです。

foo 0
bar 1
baz 0

これは、指定された要件に一致します: text-1 の元のコンテンツに加えて、一致する場合は値 1 、一致しない場合は 0 の新しい列。

于 2013-03-07T18:16:47.723 に答える