赞
踩
今天学什么
【CSV文件的读取操作】
reader():以列表的形式获取 csv 文件信息
csv.DictReader() :以字典的形式获取 csv 文件信息
【CSV文件的写入操作】
writer:写入列表
writer对象.writerow(list) 方法:写入单行
writer对象.writerows(嵌套列表) 方法:写入多行
DictWriter类:写入字典
csv.DictWriter(f, fieldnames=head)类:实例化 DictWriter 对象,便于后续写入字典数据
DictWriter对象.writeheader() 方法:写入表头
DictWriter对象.writerow(字典) 方法:写入单行
DictWriter对象.writerows(列表嵌套字典) 方法:写入多行
任务1
新建【工作】文件夹,在【工作】文件夹里新建【各班级成绩】文件夹。
# 导入模块:import 模块名
import os
# 调用函数:模块名.函数名()
# makedirs创建多级目录
os.makedirs('工作/各班级成绩')
代码运行后,文件新建成功。
任务2
在【各班级成绩】中新建【1班成绩单.csv】并写入内容
import csv # 声明文件路径 file = '工作\\各班级成绩\\1班成绩单.csv' # 用列表存储要写入的信息 list1 = ['姓名','成绩'] list2 = ['张三','30'] list3 = ['李四','40'] list4 = ['王五','50'] # 以从头写入的方式用open函数打开文件 # 将返回的文件对象赋值给变量f with open (file ,'w' ,encoding='utf-8') as f : csv_target = csv.writer(f) # writerows一次性写入多行 csv_target.writerows([list1, list2, list3, list4])
代码运行后,新建了一个CSV文件,并成功写入列表信息。
观察上图,数据之间都有一空行,这是因此CSV文件写入时默认有空行。
如果不想要空行,在open函数中增加第4个参数newline=''
import csv # 声明文件路径 file = '工作\\各班级成绩\\1班成绩单.csv' # 用列表存储要写入的信息 list1 = ['姓名','成绩'] list2 = ['张三','30'] list3 = ['李四','40'] list4 = ['王五','50'] # newline=''表示不需要空行 with open (file ,'w' ,encoding='utf-8',newline='') as f : csv_target = csv.writer(f) # writerows一次性写入多行 csv_target.writerows([list1, list2, list3, list4])
代码运行后,打开CSV文件,效果如下:
with open (file ,'w' ,encoding='utf-8',newline='') as f :
csv_target = csv.writer(f)
print(csv_target)
print(type(csv_target))
# writerows一次性写入多行
csv_target.writerows([list1, list2, list3, list4])
print(type(csv_target))
【终端输出】
<_csv.writer object at 0x000001FC2E2C9590>
<class '_csv.writer'>
<class '_csv.writer'>
csv_target是一个要写入的对象,对象类型为<class ‘_csv.writer’>。
当我们用writer 写入信息时,csv_target是一个要写入的对象,对象类型为<class ‘_csv.writer’>。
任务3
输出【1班成绩单.csv】中的内容
import csv
# 声明文件路径
file = '工作\\各班级成绩\\1班成绩单.csv'
# 以只读模式用open函数打开文件
# 将返回的文件对象赋值给变量f
with open (file, 'r',encoding='utf-8') as f :
csv_target = csv.reader(f)
for row in csv_target :
print(row)
【终端输出】
['姓名', '成绩']
['张三', '30']
['李四', '40']
['王五', '50']
运行代码后,以列表的形式输出了CSV文件中的内容。
with open (file, 'r',encoding='utf-8') as f :
csv_target = csv.reader(f)
print(csv_target)
print(type(csv_target))
for row in csv_target :
row
print(type(row))
<_csv.reader object at 0x000001FC2E2CEF40>
<class '_csv.reader'>
<class 'list'>
当我们用reader 读取文件信息时,csv_target是一个要读取的对象,对象类型为<class ‘_csv.reader’>
遍历_csv.reader
对象得的数据类型是列表,即<class ‘list’>。
import csv
# 声明文件路径
file = '工作\\各班级成绩\\1班成绩单.csv'
# 以只读模式用open函数打开文件
# 将返回的文件对象赋值给变量f
with open (file, 'r',encoding='utf-8') as f :
csv_target = csv.DictReader(f)
for row in csv_target :
print(row)
【终端输出】
{'姓名': '张三', '成绩': '30'}
{'姓名': '李四', '成绩': '40'}
{'姓名': '王五', '成绩': '50'}
with open (file, 'r',encoding='utf-8') as f :
csv_target = csv.DictReader(f)
print(csv_target)
print(type(csv_target))
for row in csv_target :
row
print(type(row))
【终端输出】
<csv.DictReader object at 0x000001FC2E29B5E0>
<class 'csv.DictReader'>
<class 'dict'>
当我们用DictReader类 读取文件信息时,csv_target是一个要DictReader对象,对象类型为<class ‘csv.DictReader’>。
遍历_csv.reader
对象得的数据类型是字典,<class ‘dict’>。
csv.writer 和csv.DictReader的区别
【代码解析】
因为任务只是读取信息,不需要写入,只因此open函数的第二参数mode=r
,r 是只读模式。
我们首先使用 open() 函数打开csv文件,open函数会返回一个文件对象。
这里我们将返回的文件对象赋给了变量 f。
随后将文件对象 f 作为参数传给 DictReader()类。
然后调实例化DictReader()类对象= csv.DictReader(f)
,得到一个DictReader对象,类型为<class 'csv.DictReader'>
。
然后我们使用 for 循环来遍历它的每一个元素。
可以看到,终端输出几个字典。
因为 DictReader() 类以字典的形式读取 csv 文件。
所以,for 循环每次遍历后,我们可以得到一个字典。
其中,字典的键表示文件里的表头,字典的值表示文件每一行的单元格数据。如下图所示:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。