文章目录
- 1. 目标任务
- 2. 准备工作
- 3. writerow单行写入
- 4. writerows多行写入
- 5. a以追加的模式写入值
- 6. 总结
1. 目标任务
-
新建【各班级成绩】文件夹;
-
在该文件夹下新建一个【1班成绩单.csv】文件;
-
在该文件中写入下面的内容:
成绩 姓名
刘一 100
陈二 90
张三 80
李四 70
王五 60
2. 准备工作
-
在电脑D盘新建一个【77】文件夹。
-
用VScode编辑器打开【77】文件夹。
-
在【77】文件夹中新建一个
77.py
文件。 -
打家在
77.py
文件中编写代码。
3. writerow单行写入
【要写入的内容】
成绩 姓名
刘一 100
陈二 90
张三 80
李四 70
王五 60
第一行成绩 姓名
是表头。
后面的5行是要写入的内容。
要写入的值有5行,我们需要用5个字典存储要写入的值。
【体验代码】
# 导入os 模块,用于创建文件目录
import os
# 导入 csv 模块,用于操作CSV文件
import csv
# mkdir作用是创建目录
# 相对路径
os.mkdir("各班级成绩")
# 用字典存储要写入CSV文件的信息
dict1 = {'姓名': '刘一', '成绩': '100'}
dict2 = {'姓名': '陈二', '成绩': '90'}
dict3 = {'姓名': '张三', '成绩': '80'}
dict4 = {'姓名': '李四', '成绩': '70'}
dict5 = {'姓名': '王五', '成绩': '60'}
# 设置文件的表头,即列名
header = ['姓名', '成绩']
# 文件的相对路径
file_path = r'各班级成绩\1班成绩单.csv'
# 以自动关闭文件的方式创建文件对象
with open(file_path, 'w', encoding='utf-8', newline="") as f:
# 实例化类 DictWriter(),得到 DictWriter 对象
dw = csv.DictWriter(f, fieldnames=header)
# 写入文件的表头
dw.writeheader()
# writerow每次写入一行
dw.writerow(dict1)
dw.writerow(dict2)
dw.writerow(dict3)
dw.writerow(dict4)
dw.writerow(dict5)
【对象语法回顾】
这里对几个大家比较陌生的语法点进行回顾。
回顾的次数多了,它就是你脑子里的东西了。
# 以自动关闭文件的方式创建文件对象
with open(file_path, 'w', encoding='utf-8', newline="") as f:
f
是是with open 语句创建的文件对象。
# 实例化类 DictWriter(),得到 DictWriter 对象
dw = csv.DictWriter(f, fieldnames=header)
实例化列,创建对象语法:
对象名=类名()
dw是实例化类后创建的csv.DictWriter
对象。
dw是对象名。
csv是模块名。
DictWriter是类名,作用是用字典的形式写入。
# writerow每次写入一行
dw.writerow(dict1)
调用类的方法语法:
对象名.方法名(值,…)
dw是对象名。
writerow是方法名,作用是每次写入一行。
dict1是要写入的值。
运行上面的代码,我们成功向CSV文件写入了上述5行值。
上面的代码我们写入5行值,调用了5次writerow
方法。
# writerow每次写入一行
dw.writerow(dict1)
dw.writerow(dict2)
dw.writerow(dict3)
dw.writerow(dict4)
dw.writerow(dict5)
这样的写法太复杂了,不符合Python代码简洁的特性。
上述5行代码我们可以用一行代码进行替换。
# writerows多行写入
dw.writerows([dict1,dict2,dict3,dict4,dict5])
4. writerows多行写入
writerow:CSV模块中,写入一行数据。
writerows:CSV模块中,写入多行数据。
【体验代码】
# 导入 csv 模块,用于操作CSV文件
import csv
# 用字典存储要写入CSV文件的信息
dict1 = {'姓名': '刘一', '成绩': '100'}
dict2 = {'姓名': '陈二', '成绩': '90'}
dict3 = {'姓名': '张三', '成绩': '80'}
dict4 = {'姓名': '李四', '成绩': '70'}
dict5 = {'姓名': '王五', '成绩': '60'}
# 设置文件的表头,即列名
header = ['姓名', '成绩']
# 文件的相对路径
file_path = r'各班级成绩\1班成绩单.csv'
# 以自动关闭文件的方式创建文件对象
with open(file_path, 'w', encoding='utf-8', newline="") as f:
# 实例化类 DictWriter(),得到 DictWriter 对象
dw = csv.DictWriter(f, fieldnames=header)
# 写入文件的表头
dw.writeheader()
# writerows多行写入
dw.writerows([dict1, dict2, dict3, dict4, dict5])
【温馨提示】
上面这段代码我删除了os相关的语句(下面的代码被删除):
# 导入os 模块,用于创建文件目录
import os
# mkdir作用是创建目录
# 相对路径
os.mkdir("各班级成绩")
因为【各班级成绩】文件夹已经存在,如果我们在创建该目录,程序会报错。
【易错解析】
大家注意writerows
的参数是一个列表类型:
# writerows多行写入
dw.writerows([dict1, dict2, dict3, dict4, dict5])
很多同学会写成下面这样的形式:
# writerows多行写入
dw.writerows(dict1, dict2, dict3, dict4, dict5)
没有列表类型,数据是会报错的。
5. a以追加的模式写入值
上面的代码with open语句的写入模式即mode参数都是w。
w
就是不管我们的文件之前有什么内容,只要选用了w
模式写入,之前的内容都会被覆盖。
a
是追加模式,追加模式就是保留原有的内容。
下面我们将mode参数修改为a
。
# 以自动关闭文件的方式创建文件对象
with open(file_path, 'a', encoding='utf-8', newline="") as f:
【体验代码】
# 导入 csv 模块,用于操作CSV文件
import csv
# 用字典存储要写入CSV文件的信息
dict1 = {'姓名': '刘一', '成绩': '100'}
dict2 = {'姓名': '陈二', '成绩': '90'}
dict3 = {'姓名': '张三', '成绩': '80'}
dict4 = {'姓名': '李四', '成绩': '70'}
dict5 = {'姓名': '王五', '成绩': '60'}
# 设置文件的表头,即列名
header = ['姓名', '成绩']
# 文件的相对路径
file_path = r'各班级成绩\1班成绩单.csv'
# 以自动关闭文件的方式创建文件对象
with open(file_path, 'a', encoding='utf-8', newline="") as f:
# 实例化类 DictWriter(),得到 DictWriter 对象
dw = csv.DictWriter(f, fieldnames=header)
# 写入文件的表头
dw.writeheader()
# writerows多行写入
dw.writerows([dict1, dict2, dict3, dict4, dict5])
运行代码,得到的结果如下:
观察输出结果,注意绿色框的内容。
这里多了一个表头是我们不需要的,那怎么办呢?
writeheade是写入表头的意思。
删除这行代码就没有表头了。
# 写入文件的表头
dw.writeheader()
【体验代码】
# 导入 csv 模块,用于操作CSV文件
import csv
# 用字典存储要写入CSV文件的信息
dict1 = {'姓名': '刘一', '成绩': '100'}
dict2 = {'姓名': '陈二', '成绩': '90'}
dict3 = {'姓名': '张三', '成绩': '80'}
dict4 = {'姓名': '李四', '成绩': '70'}
dict5 = {'姓名': '王五', '成绩': '60'}
# 设置文件的表头,即列名
header = ['姓名', '成绩']
# 文件的相对路径
file_path = r'各班级成绩\1班成绩单.csv'
# 以自动关闭文件的方式创建文件对象
with open(file_path, 'a', encoding='utf-8', newline="") as f:
# 实例化类 DictWriter(),得到 DictWriter 对象
dw = csv.DictWriter(f, fieldnames=header)
# 不要表头就不需要这行代码
#dw.writeheader()
# writerows多行写入
dw.writerows([dict1, dict2, dict3, dict4, dict5])
6. 总结
【写入表头】
dw.writeheader()
【writerow每次写入一行】
dw.writerow(dict1)
【writerows多行写入】
dw.writerows([dict1, dict2, dict3, dict4, dict5])
w模式写入,之前的内容被覆盖。
a模式写入,保留原有的内容。
【综合代码】
# 导入os 模块,用于创建文件目录
import os
# 导入 csv 模块,用于操作CSV文件
import csv
# mkdir作用是创建目录
# 相对路径
os.mkdir("各班级成绩2")
# 用字典存储要写入CSV文件的信息
dict1 = {'姓名': '刘一', '成绩': '100'}
dict2 = {'姓名': '陈二', '成绩': '90'}
dict3 = {'姓名': '张三', '成绩': '80'}
dict4 = {'姓名': '李四', '成绩': '70'}
dict5 = {'姓名': '王五', '成绩': '60'}
# 设置文件的表头,即列名
header = ['姓名', '成绩']
# 文件的相对路径
file_path = r'各班级成绩2\1班成绩单.csv'
# 以自动关闭文件的方式创建文件对象
with open(file_path, 'a', encoding='utf-8', newline="") as f:
# 实例化类 DictWriter(),得到 DictWriter 对象
dw = csv.DictWriter(f, fieldnames=header)
# 写入文件的表头
dw.writeheader()
# writerow每次写入一行
dw.writerow(dict1)
# writerows多行写入
dw.writerows([dict2, dict3, dict4, dict5])