谁来帮助一下无助的女大学生?!
不懂CSV文件是要自己创建吗?怎么打开呢?代码怎么打?为什么要这样打?
您不是有了嘛!如果是图片,您照着用文本编辑器存一个呗(当然您能用代码存也可以)。可以用python 内置csv模块,也可以自已手撕。手撕用open()直接读取处理,csv模块有读取方法。关于csv文本您可以翻阅我的学习笔记反斜杠让您的csv文档字符不撞车,让“借”(白嫖)您csv数据的人叫苦不迭了解更多。
csv学生成绩文本文件内容
代码运行效果截屏图片
代码
#!/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)
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)
不知道你这个问题是否已经解决, 如果还没有解决的话:
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
首先,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文件。
在编写代码的过程中,需要注意以下几点细节: