从两个文件读取并写入一个文件

时间:2018-05-28 13:10:14

标签: python file

您好,我有一个学校练习,我无法解决,我几乎在那里,但有些东西让我失望,所以我有2个.txt文件一个有学生姓名,另一个有学生成绩他们就像:

nomesAlunos.txt :
Ricardo
Filipa
Teresa
Claúdio


nomesNotas.txt :
14 15 14 17
14 14
13 10
13 10 11

我应该创建一个新文件,其中我有学生姓名,然后是学生平均成绩,我的代码如下:

final=open('data/notasFinal.txt','w')
nomes=open('data/nomesAlunos.txt')
notas=open('data/nomesNotas.txt')
for linha in nomes:
    final.write(linha)
    for line in notas:
        lista=line.split()
        media=(sum((int(numeros) for numeros in lista)))/(len(lista))
        final.write(str(media))
nomes.close()
notas.close()

我的最终.txt文件现在就像这样:

Ricardo
15.014.011.511.333333333333334Filipa
Teresa
Claúdio

解决:

final=open('data/notasFinal.txt','w')
nomes=open('data/nomesAlunos.txt')
notas=open('data/nomesNotas.txt')
media=[]
i=0
for linhas in notas:
    lista=linhas.split()
    media.append((sum((int(numeros) for numeros in lista)))/(len(lista)))
for nome in nomes:
    alunos=nome.split()
    final.write(f"{alunos[0]:30}{media[i]}\n")
    i+=1
nomes.close()
notas.close()
final.close()

3 个答案:

答案 0 :(得分:1)

至于没有给出完整的答案(毕竟这是一个学校作业!),而不是在'nomes'循环中循环你的'notas'文​​件,你可能要考虑使用Python的notas.readline在循环的每次迭代中起作用。

现在,每当你尝试循环“nomes”时,你就会在每一行'notas'中循环。但是,在第一个循环中,您已经浏览了整个“nomes”文件,并且没有任何内容可供阅读。

答案 1 :(得分:0)

您的迭代设置不会解决您的问题。

第一个循环遍历名称。它会写出第一个名字,然后跳转到第二个循环。在那里它将寻找所有 所有学生的成绩。完成后,它将继续第一个循环,打印出下一个名称。现在它又回到了成绩的循环中,但是这个文件已经被读到最后了,所以它不再打印了。

解决方案:您只需要一个循环。该循环将遍历BOTH文件中的每个行数。

尽管你可以用next(nomes)next(noats)分别阅读每一行,然后将THAT放入你的循环中,直到没有其他内容可读。

答案 2 :(得分:0)

这会让你开始,如果你在任何时候都不理解,请知道: -

with open('out.txt','w') as outfile, open('names.txt','r') as in1, open('grades.txt','r') as in2:
    inp1 = in1.read().split("\n");
    inp2 = in2.read().split("\n");
    out = list(map(list, (zip(inp1,inp2))));
    print(out)
    out_text = ("\n").join([" ".join(i) for i in out])
    outfile.write(out_text)