到目前为止,这是我从评论中得到的内容,但它并没有运行。
with open('score_report.txt') as in_file, open('score_report.txt','w') as out_file:
f = iter(in_file)
while True:
try:
name = next(f)
scores = next(f)
except StopIteration:
break
s = scores.strip('[]\n').split(', ')
scores1 = tuple(map(int, s))
out_file.write('{}\t{}\t{}\t{}\n'.format(name.strip(),
min(scores1),
max(scores1),
sum(scores1)/len(scores1)))
我是怎么看不到的?我需要它在不同的行上打印学生成绩报告。
Smith, Jane
[77, 91, 70, 93, 73, 87]
Doe, John
[90, 83, 94, 77, 88, 95, 73]
Jones, David
[99, 80, 95, 70, 83, 99, 78]
您的程序将打印到一个名为score_report.txt的文件,每个学生一行,其中包含他们的姓名,最高分数,最低分数和平均分数,其中每个项目通过选项卡与下一个项目分开。< / p>
答案 0 :(得分:0)
您可以使用zip
函数创建连续行对,然后使用ast.literal_eval
将列表字符串转换为列表对象:
from itertools import tee
with open('file_name') as in_file,open('score_report.txt','w') as out_file:
f1,f2 = tee(in_file)
next(f2)
for name , scores in zip(f1,f2):
scores = ast.literal_eval(scores.strip())
out_file.write('{}\t{}\t{}\t{}'.format(
name.strip(),
min(scores),
max(scores),
sum(scores)/len(scores)))
请注意,由于文件对象是使用itertools.tee
的迭代器,因此您可以从文件对象创建2个独立迭代器,然后使用next来使用其中一个迭代器的第一个项,然后使用zip创建相对对。 / p>
答案 1 :(得分:0)
这是我的解决方案
with open('file_name') as in_file, open('score_report.txt','w') as out_file:
f = iter(in_file)
while True:
try:
name = next(f)
scores = next(f)
except StopIteration:
break
s = scores.strip('[]\n').split(', ')
iscores = tuple(map(int, s))
out_file.write('{}\t{}\t{}\t{}\n'.format(name.strip(),
min(iscores),
max(iscores),
sum(iscores)/len(iscores)))
,输入文件为
Smith, Jane
[77, 91, 70, 93, 73, 87]
Doe, John
[90, 83, 94, 77, 88, 95, 73]
Jones, David
[99, 80, 95, 70, 83, 99, 78]
生成
的输出文件Smith, Jane 70 93 81.83333333333333
Doe, John 73 95 85.71428571428571
Jones, David 70 99 86.28571428571429