内容正文:
任务6.3 读写CSV文件
成绩统计排序
python
6.3 读写CSV文件——成绩统计排序
【任务描述】
期末考试后,学生各门课程的成绩被存放到成绩的文件score.csv中,小T想用Python编程帮助老师统计每个学生的总分,根据总分从高到低排序,最后将结果输出到屏幕上,并写入新文件scoreSort.csv。
python
6.3 读写CSV文件——成绩统计排序
【任务分析】
根据任务需求,首先要从成绩文件score.csv中读取成绩数据。由于CSV文件有一定的格式规范,因此需要对读取的内容进行相应的转换处理;然后对获取的数据进行计算;完成计算后,对数据进行排序输出,最后将数据写入scoreSort.csv文件即可。
从上面的分析中可以看出,解决问题的关键是CSV文件数据的读取及转换处理,下面我们就来了解CSV文件的格式及读写操作方法。
python
6.3 读写CSV文件——成绩统计排序
6.3.1 CSV格式文件
6.3.2 CSV格式文件读写
6.3.3 任务实现——成绩统计排序
python
6.3.1 CSV格式文件
python
6.3.1 CSV格式文件
CSV(Comma-separated Values,逗号分割值)是一种通用的、相对简单的文件格式。
CSV格式文件以纯文本形式存储表格数据,文件的每一行都对应表格中的一条记录,每条记录由一个或多个字段组成,字段之间使用某个字符或字符串分隔。最常用的分隔符是逗号(英文,半角)或制表符。
CSV格式文件是文本文档,对文本文件进行读、写的方法都适用于CSV格式文件的数据处理。而CSV格式文件中的数据基本上是由行和列构成的二维数据,可以使用列表嵌套的方法来进行转换处理。
姓名,语文,数学,英语,理综李莎,116,138,134,256陈锋,122,134,127,271叶佳佳,118,140,128,262张兰,125,145,133,238邓阳,123,128,127,265李立文,132,110,132,247
python
6.3.2 CSV格式文件读写
python
1.数据读取
Python3操作CSV文件可使用自带的csv包。通过csv包中的函数可以方便地对csv文件进行读写操作。这里以score.csv文件为例,读取文件内容并计算每名学生的总分,最后将其输出到屏幕上。
Python通过csv包中的reader()函数来读取文件中的数据,并返回生成器reader,以行为单位,每次读取一行,其语法格式如下:
其中,f为读取的文件,delimiter参数指定分隔符为逗号(默认值),函数结果返回生成器reader,每次读取一行数据,为列表格式。
6.3.2 CSV格式文件读写
csv.reader(f, delimiter=',')
python
根据数据的逻辑存储结构,文件可分为文本文件和二进制文件。文本文件是指以单一特定字符编码形式存储数据的文件。如按照UTF-8编码格式组织的文件。我们常见的.txt文档,.py的python源代码文件都是文本文件。
二进制文件:没有统一的字符编码,按照预定义的格式组织数据。如可执行程序、图形、图像、声音等文件都是二进制文件。
6.3.2 CSV格式文件读写
【例6-25】读取CSV文件。
import csv
with open("score.csv",encoding="utf-8") as f:
data = csv.reader(f,delimiter=',')
header = next(data) #获取标题行数据
print(header)
for line in data:
print(line)
['姓名', '语文', '数学', '英语', '理综']
['李莎', '116', '138', '134', '256']
['陈锋', '122', '134', '127', '271']
['叶佳佳', '118', '140', '128', '262']
['张兰', '125', '145', '133', '238']
['邓阳', '123', '128', '127', '265']
['李立文', '132', '110', '132', '247']
python
2.数据写入
使用csv包中的writer()函数写入CSV文件,其语法格式如下:
csv.writer()返回一个csv.writer对象,使用csv.writer对象可将用户的数据写入该csv.writer对象对应的文件中。csvfile为文件对象。csv.writer()生成的 csv.writer文件对象支持以下写入CSV文件的方法:
(1)writerow(列表):写入一行数据。
(2)writerows(嵌套列表):写入多行数据。
6.3.2 CSV格式文件读写
writer = csv.writer(csvfile)
python
根据数据的逻辑存储结构,文件可分为文本文件和二进制文件。文本文件是指以单一特定字符编码形式存储数据的文件。如按照UTF-8编码格式组织的文件。我们常见的.txt文档,.py的python源代码文件都是文本文件。
二进制文件:没有统一的字符编码,按照预定义的格式组织数据。如可执行程序、图形、图像、声音等文件都是二进制文件。
6.3.2 CSV格式文件读写
【例6-26】数据写入CSV文件。
import csv
header = ['姓名', '语文', '数学', '英语', '理综']
data = [['李莎', '116', '138', '134', '256'],
['陈锋', '122', '134', '127', '271'],
['叶佳佳', '118', '140', '128', '262'],
['张兰', '125', '145', '133', '238’]]
with open("score2.csv",'w',encoding="utf-8",newline='') as f:
writer = csv.writer(f)
writer.writerow(header) # 写入一行数据
writer.writerows(data) # 写入多行数据
需要注意的是,在打开文件时,需要指定不自动添加新行newline='',否则每写入一行就会出现一个空行。
python
6.3.3 任务实现——成绩统计排序
python
6.3.3 任务实现——成绩统计排序
【任务描述】
期末考试后,学生的成绩从系统中导出保存在文件score.csv中,编程统计每个学生的总分,并根据总分从高到低排序,最后将结果输出到屏幕上,并写入新文件scoreSort.csv中。
python
6.3.3 任务实现——成绩统计排序
【任务分析】
以CSV文件格式保存的成绩表是由行和列构成的二维数据,转换为二维列表能够方便访问和计算;在转换为二维列表之后,通过列表排序的方法解决排序的问题;数据包含标题行,在处理的过程中,可以将标题行单独处理。
python
6.3.3 任务实现——成绩统计排序
【例6-27】任务实现——成绩统计排序。
import csv
with open("score.csv",encoding="utf-8") as f:
data = csv.reader(f,delimiter=',')
header = next(data) # 获取标题行数据
body = []
for line in data:
body.append(line)
header.append('总分')
(1) 获取标题行数据
python
文件和目录管理涉及的函数较多,这里只介绍了常用的一些函数。要掌握这些函数的使用,还需要多在实践中练习。这里有一个操作示例:编写函数,获取目录的大小。我们来看看如何完成。
6.3.3 任务实现——成绩统计排序
(2)计算总分,排序
#计算总分
for line in body:
sum = 0
for i in range(1,len(line)):
sum += int(line[i])
line.append(str(sum))
# 排序
body.sort(key = lambda x:int(x[5]),reverse=True)
#写入数据
with open("scoreSort.csv",'w',newline='') as f:
writer = csv.writer(f)
writer.writerow(header)
writer.writerows(body)
姓名,语文,数学,英语,理综,总分陈锋,122,134,127,271,654叶佳佳,118,140,128,262,648李莎,116,138,134,256,644邓阳,123,128,127,265,643张兰,125,145,133,238,641李立文,132,110,132,247,621
python
文件和目录管理涉及的函数较多,这里只介绍了常用的一些函数。要掌握这些函数的使用,还需要多在实践中练习。这里有一个操作示例:编写函数,获取目录的大小。我们来看看如何完成。
$$