77. writerows写入多行

1. 目标任务

  1. 新建【各班级成绩】文件夹;

  2. 在该文件夹下新建一个【1班成绩单.csv】文件;

  3. 在该文件中写入下面的内容:

成绩 姓名
刘一 100
陈二 90
张三 80
李四 70
王五 60

2. 准备工作

  1. 在电脑D盘新建一个【77】文件夹。

  2. 用VScode编辑器打开【77】文件夹。

  3. 在【77】文件夹中新建一个77.py文件。

  4. 打家在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])
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值