2017-06-03 22 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