2017-06-03 48 views
0

我正在嘗試創建一個程序,該程序將單獨列表中的相應值相加,並用計算的總和編寫一個新文件。例如,我有infile_1.txt 10項,infile_2.txt也有10項。我們的目標是從infile_1.txt中獲取第一個數字,將其添加到第一個數字infile_2並創建一個新的文本文件,其中包含兩個數字的和。這兩個文件與我的程序位於同一文件夾中,因此Python可以識別它們並將新文件打印到該文件夾​​中。我使用的代碼如下:無法獲得總和以在outfile中打印

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創建的文件,並且沒有寫入任何內容。

目前,我遇到的錯誤 「totalenergy = myfile_1 [0:] + myfile_2 [0:] 類型錯誤: '_io.TextIOWrapper' 對象未標化的」。我還遇到一個屬性錯誤,這與關閉infiles和outfile有關,它說「'str'沒有屬性'關閉'

另外一個問題:如果兩個文件不同長度,是否可以重寫for循環來解決長度差異?我想知道的另一件事是,如果行totalenergy = myfile_1[0:] + myfile_2[0:]在Python每次連續迭代期間抓取每個列表中下一個值的意義上都是正確的。

我是相對較新的python,所以任何幫助將不勝感激。謝謝。

回答

1

當你做for line in myfile_1:,那讀取文件,所以myfile_1.readline()得到下一個線。你不需要第二個陳述。

另外,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

啊,錯過了兩個不同的文件,這是安全的。當然,'對於readfile1,zip(myfile_1,myfile_2)中的readfile2:'將會以更直接的方式完成並行迭代。 – ShadowRanger