2017-06-03 10 views
0

対応する値を別々のリストに合計し、計算された合計で新しいファイルを書き込むプログラムを作成しようとしています。たとえば、私はinfile_1.txtの10個のアイテムとinfile_2.txtの10個のアイテムを持っています。目安はinfile_1.txtの最初の数字をinfile_2の最初の数字に追加し、2つの数字の合計で新しいテキストファイルを作成することです。 2つのファイルは私のプログラムと同じフォルダにあるので、Pythonはそれらを認識して新しいファイルをフォルダにも印刷します。私が使用していたコードは以下の通りです:アウトファイルで印刷する合計を取得できません

def sumen(): 
outfile = input("Name the output file: ") 
myfile_1 = open("infile_1.txt",'r') 
myfile_2 = open("infile_2.txt",'r') 
outputfile = open(outfile, 'w') 
for line in myfile_1: 
    readfile1 = myfile_1.readline() 
    readfile2 = myfile_2.readline() 
    totalenergy = myfile_1[0:] + myfile_2[0:] 
    print(totalenergy,file=outputfile) 
myfile_1.close() 
myfile_2.close() 
outputfile.close() 
sumen() 

私はプログラムを実行すると、それは私がOUTFILE(totalenergy.txt)を選択することを可能にし、それが終了します。私はPythonが作成するファイルをチェックしましたが、そこには何も書かれていません。 ":+ myfile_2 [0:] はTypeError: '_io.TextIOWrapper' オブジェクトは、添字化ないtotalenergy = myfile_1 [0]"

現在、私はエラーが発生しています。私はまた、 "'str'属性が 'close'の属性を持たないinfilesとoutfileの終了に関連する属性エラーが発生しました

もう1つの質問:2つのファイルが異なる場合長さの違いを考慮してforループを書き換えることは可能ですか?私が疑問に思っているもう一つのことは、それぞれの連続した繰り返しの間に各リストの次の値を取得するPythonの意味で、totalenergy = myfile_1[0:] + myfile_2[0:]という行が正しいかどうかです。

私はPythonで比較的新しいので、どんな助けでも大歓迎です。ありがとう。

答えて

1

for line in myfile_1:を実行すると、そのファイルが読み取られるため、myfile_1.readline()は、の次の行を取得します。 2番目のステートメントは必要ありません。

また、readfile1readfile2は文字列になります。それらを整数として追加する場合は、int()を呼び出して変換する必要があります。

for readfile1 in myfile_1: 
    readfile2 = myfile_2.readline() 
    totalenergy = int(readfile1) + int(readfile2) 
    print(totalenergy,file=outputfile) 

このループを書く他の方法については、How to cleanly loop over two files in parallel in Pythonを参照してください。

+0

Pythonのバージョンによっては、反復と '.readline()'への明示的な呼び出しは安全ではなく、必ずしも正しく動作するとは限りません。 (ループを暗黙的に、あるいは 'next(myfile_1)'を使って明示的に)反復するだけで、 '.readline()'も呼び出さないでください。 – ShadowRanger

+0

@ShadowRanger別ファイルの場合は本当に危険ですか? – Barmar

+0

ああ、それは2つの異なるファイルだったので、それは安全です。もちろん、 'readfile1のために、zipのreadfile2(myfile_1、myfile_2):'は、とにかくより直接的に並列的に反復処理を行います。 – ShadowRanger

関連する問題