读CSV文件里的内容,对文件中每位同学的成绩求平均分,保存成json文件

谁来帮助一下无助的女大学生?!
不懂CSV文件是要自己创建吗?怎么打开呢?代码怎么打?为什么要这样打?

img

  您不是有了嘛!如果是图片,您照着用文本编辑器存一个呗(当然您能用代码存也可以)。可以用python 内置csv模块,也可以自已手撕。手撕用open()直接读取处理,csv模块有读取方法。关于csv文本您可以翻阅我的学习笔记反斜杠让您的csv文档字符不撞车,让“借”(白嫖)您csv数据的人叫苦不迭了解更多。


  • csv学生成绩文本文件内容

    img

  • 代码运行效果截屏图片

    img

  • 代码

#!/sur/bin/nve python
# coding: utf-8
import json

filename = '/sdcard/Documents/score2.txt'
json_filename = '/sdcard/Documents/json_score.txt'

with open(filename) as f:
    filds = f.readline()[:-1].split()
    scores = [{k: v for k,v in zip(filds, line.split())} for line in f.read().split('\n')]

print('\n学生成绩字典:', scores)

for i in range(len(scores)): # 遍历学生成绩列表长度。
    d = scores[i] # 学生成绩字典别名。
    score = [float(d.get(key)) for key in filds[1:]] # 列表解析学生成绩。
    d['平均分'] = round(sum(score)/len(score), 1) # 计算平均分并保留一位小数。
    scores[i] = d # 重写学生成绩列表中的学生成绩字典。

print('\n计算平均分后的成绩列表:\n', scores)

json.dump(scores, open(json_filename, 'w')) # 将学生成绩列表以json字符串的形式写入文本文件。

print(f"\n{' 学生成绩列表 ':~^44}\n")
blank = ' '*18

for score in scores: # 用字典视图打印学生成绩。
    print() 

    for k, v in score.items():
        print(f"{blank}{k}{v}") 

    print() 

print('~'*50)



  • 保存到磁盘文本文件的json格式字符串的学生成绩列表

    img


grades.csv是你的CSV文件,加上路径,如果没有,你可以自己创建CSV文件;运行代码后会生成名为grades.json的JSON文件,你可以选择要保存的路径。


import csv
import json

# 读取CSV文件
with open('grades.csv', 'r') as f:
    reader = csv.DictReader(f)
    # 初始化结果列表
    result = []
    # 遍历每一行数据
    for row in reader:
        # 计算平均分
        avg_score = (int(row['语文']) + int(row['数学']) + int(row['英语'])) / 3
        # 将结果添加到列表中
        result.append({
            '学号': row['学号'],
            '语文': row['语文'],
            '数学': row['数学'],
            '英语': row['英语'],
            '平均分': str(avg_score)
        })

# 将结果保存为JSON文件
with open('grades.json', 'w') as f:
    json.dump(result, f, ensure_ascii=False, indent=4)
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7685706
  • 除此之外, 这篇博客: 省市区三级坐标边界数据csv转JSON中的  目的:转化为这个格式的json格式 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

     

    import pandas as pd
    import json
    import re
    
    
    
    # 读 ok_geo.csv csv文件
    def read_csv(file_name):
        df = pd.read_csv(file_name, encoding='utf-8')
        # 创建国家字典
        country_dict = {"name": "China", "border": None, "area": []}
    
        # 实验用的n控制循环次数
        n = 0
        for index, row in df.iterrows():
            # 判断是否是一级地址
            if row["deep"] == 0:
                # 创建省字典
                province_dict = {"name": None, "center": None, "border": None, "area": []}
                # 赋值省份字典
                province_dict["name"] = row["name"]
                # 获取省份坐标中心
                province_dict["center"] = [float(i) for i in row["geo"].split(" ")]
                # print(province_dict["center"])
                province_border = row["polygon"]
                # 按","分割,再按照空格分割,转换浮点类型
                province_border = [[float(i) for i in re.split(" |;", j)] for j in province_border.split(",")]
                province_dict["border"] = province_border
                # 将省份字典添加到国家字典的area中
                country_dict["area"].append(province_dict)
    
            elif row["deep"] == 1:
                # 创建市字典
                city_dict = {"name": None, "center": None, "border": None, "countyArea": []}
                # 赋值市字典
                city_dict["name"] = row["name"]
                try:
                    # 获取市坐标中心
                    city_dict["center"] = [float(i) for i in row["geo"].split(" ")]
                except:
                    city_dict["center"] = None
                # 获取市边界
                try:
                    city_border = row["polygon"]
                    # 按","分割,再按照空格分割,转换浮点类型
                    city_border = [[float(i) for i in re.split(' |;', j)] for j in city_border.split(",")]
                except:
                    city_border = None
                city_dict["border"] = city_border
    
                # 判断属于哪个省
                belong_to_p = row["ext_path"].split(" ")[0]
                # print(belong_to_p)
                # 查找国家字典中省份列表中的省份字典那个name属性值与belong_to_p相同的那个省份字典所在列表的索引
                for i, x in enumerate(country_dict["area"]):
                    if x["name"] == belong_to_p:
                        # 将市字典添加到省份字典的area中
                        p_index = i
                        break
                # print(p_index)
                country_dict["area"][p_index]["area"].append(city_dict)
    
            else:
                # 创建县区字典
                district_dict = {"name": None, "center": None, "border": None}
                # 赋值县区字典
                district_dict["name"] = row["name"]
                # 获取县坐标中心
                try:
                    district_dict["center"] = [float(i) for i in row["geo"].split(" ")]
                except:
                    district_dict["center"] = []
                # 获取边界坐标
                try:
                    district_border = row["polygon"]
                    # 按","分割,再按照空格分割,转换浮点类型
                    district_border = [[float(i) for i in re.split(' |;', j)] for j in district_border.split(",")]
                except:
                    district_border = []
                district_dict["border"] = district_border
                # 判断属于哪个省
                belong_to_p, belong_to_c= row["ext_path"].split(" ")[0], row["ext_path"].split(" ")[1]
                # print(belong_to_p)
                # 查找国家字典中省份列表中的省份字典那个name属性值与belong_to_p相同的那个省份字典所在列表的索引
                for i, x in enumerate(country_dict["area"]):
                    if x["name"] == belong_to_p:
                        # 将县区字典添加到市字典的countyArea中
                        p_index = i
                        break
                # print(p_index)
                # 判断属于那个市
                for i, x in enumerate(country_dict["area"][p_index]["area"]):
                    if x["name"] == belong_to_c:
                        c_index = i
                        break
                # print(c_index)
                country_dict["area"][p_index]["area"][c_index]["countyArea"].append(district_dict)
    
    
            # print(country_dict)
            print("正在进行第" + str(n) + "次循环," + "处理的地址为:" + row["ext_path"])
    
            n += 1
            if n==3:
                break
    
        # print(country_dict)
        # 写入json文件
        with open('demo.json', 'w', encoding='utf-8') as f:
            json.dump(country_dict, f, ensure_ascii=False)
    
    
    if __name__ == "__main__":
        read_csv('ok_geo.csv')
        pass
  • 以下回答来自chatgpt:

    首先,CSV文件是一种常用的数据交换格式,由逗号分隔的值组成一行。在使用Python读取CSV文件之前,需要先创建一个CSV文件,并将学生的成绩数据按照逗号分隔的方式写入CSV文件中。

    以下是用Python代码创建CSV文件并将学生成绩写入CSV文件中的示例:

    import csv
    
    # 学生数据
    students = [
        {'name': '张三', 'score': 89},
        {'name': '李四', 'score': 78},
        {'name': '王五', 'score': 92},
        {'name': '赵六', 'score': 85},
        {'name': '田七', 'score': 76},
    ]
    
    # 创建CSV文件并写入学生成绩
    with open('students.csv', 'w', newline='') as csvfile:
        fieldnames = ['name', 'score']
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    
        writer.writeheader()
        for student in students:
            writer.writerow(student)
    

    以上代码中,我们使用了Python内置的csv模块,先定义了学生成绩的数据列表students,然后创建了一个CSV文件,将学生成绩数据写入其中。

    接下来,我们需要读取刚刚创建的CSV文件,并计算每位同学的平均成绩,并将结果保存为json文件。以下是用Python代码读取CSV文件并计算每位同学的平均成绩的示例:

    import csv
    import json
    
    # 读取CSV文件并计算每位同学的平均成绩
    students = {}
    with open('students.csv', 'r') as csvfile:
        reader = csv.DictReader(csvfile)
        for row in reader:
            name = row['name']
            score = int(row['score'])
            if name in students:
                students[name]['scores'].append(score)
            else:
                students[name] = {'scores': [score]}
    
    for name in students:
        scores = students[name]['scores']
        students[name]['avg_score'] = sum(scores) / len(scores)
        del students[name]['scores']
    
    # 将结果保存为json文件
    with open('students.json', 'w') as jsonfile:
        json.dump(students, jsonfile)
    

    以上代码中,我们首先使用csv模块的DictReader读取CSV文件中的每一行数据,并将学生成绩数据存储到字典students中。然后,对每位同学的成绩进行计算,最后将结果保存为json文件。

    在编写代码的过程中,需要注意以下几点细节:

    • CSV文件需要一个逗号分隔的表头,即第一行是每个字段的名称。
    • 使用csv模块读取CSV文件时,需要指定字典的键值对应的字段名称。
    • 在读取每一行数据时,需要将成绩字段从字符串类型转换为整型。
    • 计算学生成绩时,需要注意判断每位同学成绩列表是否为空。
    • 将计算结果保存为json文件时,需要使用json.dump函数将字典转换为json字符串,并写入文件中。

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^