python基础教程共60课-第33课处理文件中的数据
2015-12-12 17:15
716 查看
python基础教程共60课-第33课处理文件中的数据
【Python 第33课】 处理文件中的数据
比如我现在拿到一份文档,里面有某个班级里所有学生的平时作业成绩。因为每个人交作业的次数不一样,所以成绩的数目也不同,没交作业的时候就没有分。我现在需要统计每个学生的平时作业总得分。
记得我小的时候,经常有同学被老师喊去做统计分数这种“苦力”。现在电脑普及了,再这么干就太弱了。用python,几行代码就可以搞定。
看一下我们的文档里的数据:
#-- scores.txt
刘备 23 35 44 47 51
关羽 60 77 68
张飞 97 99 89 91
诸葛亮 100
先把文件读进来:
f = file('scores.txt')
2.取得文件中的数据。因为每一行都是一条学生成绩的记录,所以用readlines,把每一行分开,便于之后的数据处理:
lines = f.readlines()
f.close()
提示:在程序中,经常使用print来查看数据的中间状态,可以便于你理解程序的运行。比如这里你可以print lines,看一下内容被存成了什么格式。
3.对每一条数据进行处理。按照空格,把姓名、每次的成绩分割开:
for line in lines:
data = line.split()
接下来的4、5两个步骤都是针对一条数据的处理,所以都是在for循环的内部。
4.整个程序最核心的部分到了。如何把一个学生的几次成绩合并,并保存起来呢?我的做法是:对于每一条数据,都新建一个字符串,把学生的名字和算好的总成绩保存进去。最后再把这些字符串一起保存到文件中:
sum = 0
for score in data[1:]:
sum += int(score)
result = '%s\t: %d\n' % (data[0], sum)
这里几个要注意的点:
对于每一行分割的数据,data[0]是姓名,data[1:]是所有成绩组成的列表。
每次循环中,sum都要先清零。
score是一个字符串,为了做计算,需要转成整数值int。
result中,我加了一个制表符\t和换行符\n,让输出的结果更好看些。
5.得到一个学生的总成绩后,把它添加到一个list中。
results.append(result)
results需要在循环之前初始化results = []
6.最后,全部成绩处理完毕后,把results中的内容保存至文件。因为results是一个字符串组成的list,这里我们直接用writelines方法:
output = file('result.txt', 'w')
output.writelines(results)
outpu.close()
大功告成,打开文件检验一下结果吧。
以下是完整程序,把其中print前面的注释符号去掉,可以查看关键步骤的数据状态。不过因为字符编码的问题,list的中文可能会显示为你看不懂的字符。
f = file('scores.txt')
lines = f.readlines()
#print lines
f.close()
results = []
for line in lines:
#print line
data = line.split()
#print data
sum = 0
for score in data[1:]:
sum += int(score)
result = '%s \t: %d\n' % (data[0], sum)
#print result
results.append(result)
#print results
output = file('result.txt', 'w')
output.writelines(results)
output.close()
【Python 第33课】 处理文件中的数据
比如我现在拿到一份文档,里面有某个班级里所有学生的平时作业成绩。因为每个人交作业的次数不一样,所以成绩的数目也不同,没交作业的时候就没有分。我现在需要统计每个学生的平时作业总得分。
记得我小的时候,经常有同学被老师喊去做统计分数这种“苦力”。现在电脑普及了,再这么干就太弱了。用python,几行代码就可以搞定。
看一下我们的文档里的数据:
#-- scores.txt
刘备 23 35 44 47 51
关羽 60 77 68
张飞 97 99 89 91
诸葛亮 100
先把文件读进来:
f = file('scores.txt')
2.取得文件中的数据。因为每一行都是一条学生成绩的记录,所以用readlines,把每一行分开,便于之后的数据处理:
lines = f.readlines()
f.close()
提示:在程序中,经常使用print来查看数据的中间状态,可以便于你理解程序的运行。比如这里你可以print lines,看一下内容被存成了什么格式。
3.对每一条数据进行处理。按照空格,把姓名、每次的成绩分割开:
for line in lines:
data = line.split()
接下来的4、5两个步骤都是针对一条数据的处理,所以都是在for循环的内部。
4.整个程序最核心的部分到了。如何把一个学生的几次成绩合并,并保存起来呢?我的做法是:对于每一条数据,都新建一个字符串,把学生的名字和算好的总成绩保存进去。最后再把这些字符串一起保存到文件中:
sum = 0
for score in data[1:]:
sum += int(score)
result = '%s\t: %d\n' % (data[0], sum)
这里几个要注意的点:
对于每一行分割的数据,data[0]是姓名,data[1:]是所有成绩组成的列表。
每次循环中,sum都要先清零。
score是一个字符串,为了做计算,需要转成整数值int。
result中,我加了一个制表符\t和换行符\n,让输出的结果更好看些。
5.得到一个学生的总成绩后,把它添加到一个list中。
results.append(result)
results需要在循环之前初始化results = []
6.最后,全部成绩处理完毕后,把results中的内容保存至文件。因为results是一个字符串组成的list,这里我们直接用writelines方法:
output = file('result.txt', 'w')
output.writelines(results)
outpu.close()
大功告成,打开文件检验一下结果吧。
以下是完整程序,把其中print前面的注释符号去掉,可以查看关键步骤的数据状态。不过因为字符编码的问题,list的中文可能会显示为你看不懂的字符。
f = file('scores.txt')
lines = f.readlines()
#print lines
f.close()
results = []
for line in lines:
#print line
data = line.split()
#print data
sum = 0
for score in data[1:]:
sum += int(score)
result = '%s \t: %d\n' % (data[0], sum)
#print result
results.append(result)
#print results
output = file('result.txt', 'w')
output.writelines(results)
output.close()
相关文章推荐
- python学习吐槽
- JDK8.0学习体会--从python的lambda类比java的lambda
- python学习笔记
- python操作mysql数据库
- Python学习笔记-4(模块:collections、itertools、xml)
- python学习笔记1
- python常用函数
- python用pip安装whl后缀的模块文件
- python操作文件目录
- python绘图函数
- Python学习笔记-3(线程、进程、同步等)
- Python for windows
- [从头学python] 第01节 python标准库里有什么
- python读取视频显示视频和保存视频文件
- Python基础(面向对象之类成员与修饰符)
- numpy各函数简介之生成数组函数
- 编译python3
- python 用xlrd及xlutils模块 复制excel文件
- python把文件夹/子文件夹内的图片导到指定文件夹
- Python模块学习系列(4)----matplotlib