当前位置: 首页 > news >正文

77. writerows写入多行

文章目录

    • 1. 目标任务
    • 2. 准备工作
    • 3. writerow单行写入
    • 4. writerows多行写入
    • 5. a以追加的模式写入值
    • 6. 总结

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])
http://www.lryc.cn/news/34768.html

相关文章:

  • STM32MP157-Linux输入设备应用编程-多点触摸屏编程
  • mybatis-plus的一般实现过程(超详细)
  • Spark(5):RDD概述
  • 面向对象 - 继承
  • 计算机网络的166个概念你知道几个 第十二部分
  • 【RabbitMQ】RabbitMQ各版本的兼容性与技术支持时限
  • 【Git】P5 Git 远程仓库(3)pull 发生冲突
  • 关于世界坐标系,相机坐标系,图像坐标系,像素坐标系的一些理解
  • 企业防护ddos的注意事项,你知道吗?
  • RocketMQ如何测试
  • SpringBoot中的bean注入方式和原理介绍
  • ESP32设备驱动-RFID-RC522模块驱动
  • SMETA认证有些客户是需要做窗口期的
  • 面向对象设计模式:创建型模式之原型模式
  • 三维重建(单目、双目、多目、点云、SFM、SLAM)
  • Java中的final和权限修饰符
  • MySQL的基本语句(SELECT型)
  • 日志服务搭建-ES-FileBeat-Kibana
  • 大数据架构设计与数据计算流程
  • 207. 课程表
  • 2023-03-08 mysql列存储数据库-查询执行过程分析
  • 各种激活函数的计算公式、图像以及实现代码
  • ArangoDB
  • MySQL8.0Linux安装及主从的搭建
  • 苹果新专利实现无线技术传输睡眠数据,蓝牙在智能家居中的应用
  • 银行数字化转型导师坚鹏:数字化转型为什么需要致良知与知行合一
  • Web前端学习:章三 -- JavaScript预热(二)
  • Excel绘制数据对比表格-表格可视化
  • 究竟是谁负了谁,来自底层测试的2022年终总结
  • C++——IO流