如何使用python从txt文件创建学生测试信息行

时间:2015-10-31 17:06:38

标签: python

到目前为止,这是我从评论中得到的内容,但它并没有运行。

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>

2 个答案:

答案 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