请问一下大家这个问题用Python怎么写呀

文件score.txt中存储了5名学生的6门课程的成绩,共5行。读取该文件,统计每个学生的平均分,并将统计结果存入文件score_avg.txt,如图所示。

img

可以参考下:

source_file = open('score.txt', mode='r', encoding='utf8')
target_file = open('score_avg.txt', mode='w', encoding='utf8')
content_line = source_file.readline()
while content_line:
    data_list = [int(data) for data in content_line.strip().split(",")]
    data_avg = sum(data_list) / len(data_list)
    target_file.write("%.2f\n" % data_avg)
    content_line = source_file.readline()
target_file.close()
source_file.close()

运行结果:

img


  首选用 pandas ,当然也可以直接 Python 。

我的 Python 环境升级后,一直没 pip install pandas 成功。

下面我就唠嗑直接 python ——

  • 成绩 csv 文本

    img

读取成绩文本,返回成绩列表:


def read_score(filename: str) -> list:
    ''' 从csv文本读取成绩,返回成绩列表 '''

    with open(filename) as f:
        scores = f.read().split('\n') # 读取成绩文本数据并拆分行。
        #print(scores) # 调试用语句。

    return [list(map(int, i.split(','))) for i in scores] # 返回拆分每行成绩成列表并转整。

也可以写成这样:


def read_score(filename: str) -> list:
    ''' 从csv文本读取成绩,返回成绩列表 '''
    scores = open(filename).read().split('\n') # 读取成绩文本数据并拆分行。
    print(scores) # 调试用语句。
    return [list(map(int, i.split(','))) for i in scores] # 返回拆分每行成绩成列表并转整。
  • 函数调用

if __name__ == '__main__':
    print(read_score(f"{path}score.txt"))
  • 代码运行效果截屏图片

    img

  如图所见,代码能够成功读取成绩为列表。

  • 计算平均分并写入文本文件

def save_avg(filename: str, scores: list) -> None:
    ''' 保存平均分文件 '''
    with open(filename, 'w') as f:
        for i in scores:
            #f.write(str(sum(i)/len(i))) # 计算并写入文本文件。
            #f.write('\n') # 写入换行符,一个学生一行。
            f.write(f"{sum(i)/len(i):.1f}\n") # 也可以用插值字符串格式一次写入。
    print('\n平均分已成功保存到文本文件。')
  • 调用函数

if __name__ == '__main__':
    save_avg(f"{path}score_avg.txt", read_score(f"{path}score.txt"))
  • 代码运行效果截屏图片

    img

  • 平均分文本

    img


    img


  插值字符串格式写法可以更方便的设置小数位数。


  • 这篇博客: python相关岗位面试题总结(五)(持续更新)中的 4、要打开文件c:\ scores.txt进行编写,我们使用: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • with open('c:\ scores.txt','a') as f:
    	f.write('输入内容')
    
  • 以下回答由chatgpt基于相关博客总结生成:

    由于参考资料与问题有些出入,需要重新撰写代码来解决问题。我们的解决方案如下:

    # 打开score.txt文件,并读入所有行
    with open('score.txt', 'r') as f:
        score_lines = f.readlines()
    
    # 创建一个内容为空的字典,用于保存所有的成绩信息
    scores = {}
    
    # 遍历每一行成绩记录,以空格为分隔符将每行成绩裂开为一个列表,第一项为学生姓名,剩余项为成绩
    for line in score_lines:
        score_items = line.strip().split(' ')
        name = score_items[0]
        # 将分数转换为浮点类型,以便后续计算
        score = [float(x) for x in score_items[1:]]
        # 计算成绩的总分和平均分
        sum_score = sum(score)
        average_score = sum_score / len(score)
        # 将学生的姓名和平均成绩存入字典
        scores[name] = average_score
    
    # 打开score_avg.txt文件,以写入模式写入所有学生的姓名和平均成绩
    with open('score_avg.txt', 'w') as f:
        for name, average_score in scores.items():
            # 格式化每个学生的姓名和平均成绩,并写入文件
            f.write(f'{name}: {average_score:.1f}\n')
    

    以上代码将score.txt文件中的所有成绩读入到一个字典中,并计算每个学生的平均成绩,最后将所有学生的姓名和平均成绩格式化后写入score_avg.txt文件中。可以根据实际需要对代码进行调整。