文件score.txt中存储了5名学生的6门课程的成绩,共5行。读取该文件,统计每个学生的平均分,并将统计结果存入文件score_avg.txt,如图所示。
可以参考下:
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()
运行结果:
首选用 pandas ,当然也可以直接 Python 。
我的 Python 环境升级后,一直没 pip install pandas 成功。
下面我就唠嗑直接 python ——
读取成绩文本,返回成绩列表:
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"))
如图所见,代码能够成功读取成绩为列表。
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"))
代码运行效果截屏图片
平均分文本
插值字符串格式写法可以更方便的设置小数位数。
with open('c:\ scores.txt','a') as f:
f.write('输入内容')
由于参考资料与问题有些出入,需要重新撰写代码来解决问题。我们的解决方案如下:
# 打开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文件中。可以根据实际需要对代码进行调整。