Python3操作读写CSV文件使用包过程解析


Posted in Python onApril 10, 2020

CSV(Comma-Separated Values)即逗号分隔值,一种以逗号分隔按行存储的文本文件,所有的值都表现为字符串类型(注意:数字为字符串类型)。

如果CSV中有中文,应以utf-8编码读写,如果要支持Excel查看,应是要用utf-8 with bom格式及utf-8-sig

Python3操作CSV文件使用自带的csv包

reader=csv.reader(f, delimiter=','):用来读取数据,reader为生成器,每次读取一行,每行数据为列表格式,可以通过delimiter参数指定分隔符

writer=csv.writer(f):用来写入数据,按行写入,writer支持writerow(列表)单行写入,和writerows(嵌套列表)批量写入多行,无须手动保存。

当文件中有标题行时,可以使用header=next(reader)先获取到第一行的数据,再进行遍历所有的数据行。
写入时,可以先使用writer.writerow(标题行列表),写入标题行,再使用writer.writerows(多行数据嵌套列表),写入多行数据(也可以逐行写入)。

数据文件data.csv:

name,password
abc,123456
张五,123#456
张#abc123,123456
666,123456
a b,123456

读取示例:

import csv
with open('data.csv', encoding='utf-8') as f:
  reader = csv.reader(f)
  header = next(reader)
  print(header)
  for row in reader:
    print(row)

注意:reader必须在文件打开的上下文中使用,否则文件被关闭后reader无法使用
所有的数字被作为字符串,如果要使用数字格式,应使用int()/float()做相应转换

写入示例:

import csv
header = ['name', 'password', 'status']
data = [
  ['abc', '123456', 'PASS'],
  ['张五', '123#456', 'PASS'],
  ['张#abc123', '123456', 'PASS'],
  ['666', '123456', 'PASS'],
  ['a b', '123456', 'PASS']
]
with open('result.csv', 'w', encoding='utf-8', newline='') as f:
  writer = csv.writer(f)
  writer.writerow(header)
  writer.writerows(data)

注意,打开文件时应指定格式为w, 文本写入,不支持wb,二进制写入,当然,也可以使用a/w+/r+

打开文件时,指定不自动添加新行newline='',否则每写入一行就或多一个空行。

如果想写入的文件Excel打开没有乱码,utf-8可以改为utf-8-sig。

结果展示,result.csv内容::

name,password,status
abc,123456,PASS
张五,123#456,PASS
张#abc123,123456,PASS
666,123456,PASS
a b,123456,PASS

使用字典格式的数据:DictReader, DictWriter#

注意数据必须有标题行时才能使用

reader=csv.DictReader(f):直接将标题和每一列数据组装成有序字典(OrderedDict)格式,无须再单独读取标题行
writer=csv.DictWriter(f, 标题行列表):写入时可使用writer.writeheader()写入标题,然后使用writer.writerow(字典格式数据行)或write.writerows(多行数据)

读取示例:

import csv
with open('data.csv', encoding='utf-8') as f:
  reader = csv.DictReader(f)
  for row in reader:
    print(row['name'], row['password'])

写入示例:

import csv

header = ['name', 'password', 'status']

data = [
  {'name':'abc', 'password':'123456', 'status':'PASS'},
  {'name':'张五', 'password':'123#456', 'status':'PASS'},
  {'name':'张#abc123', 'password':'123456', 'status':'PASS'},
  {'name':'666', 'password':'123456', 'status':'PASS'},
  {'name':'a b', 'password':'123456', 'status':'PASS'}
]


with open('result2.csv', 'w', encoding='utf-8', newline='') as f:
  writer = csv.DictWriter(f, header)
  writer.writeheader()
  writer.writerows(data)

写入结果,同result.csv

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python异常学习笔记
Feb 03 Python
理解python正则表达式
Jan 15 Python
python中matplotlib实现最小二乘法拟合的过程详解
Jul 11 Python
python3.0 模拟用户登录,三次错误锁定的实例
Nov 02 Python
Python matplotlib画图实例之绘制拥有彩条的图表
Dec 28 Python
python如何将图片转换为字符图片
Aug 19 Python
使用python 写一个静态服务(实战)
Jun 28 Python
简单了解python关系(比较)运算符
Jul 08 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
Nov 15 Python
python实现图像全景拼接
Mar 27 Python
如何基于python对接钉钉并获取access_token
Apr 21 Python
通过实例了解python__slots__使用方法
Sep 14 Python
快速解决jupyter启动卡死的问题
Apr 10 #Python
Python操作Jira库常用方法解析
Apr 10 #Python
jupyter notebook 使用过程中python莫名崩溃的原因及解决方式
Apr 10 #Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
Apr 10 #Python
jupyter notebook 参数传递给shell命令行实例
Apr 10 #Python
调整Jupyter notebook的启动目录操作
Apr 10 #Python
解决jupyter notebook显示不全出现框框或者乱码问题
Apr 09 #Python
You might like
NOT NULL 和NULL
2007/01/15 PHP
Discuz 模板语句分析及知识技巧
2009/08/21 PHP
比较全面的PHP数组的使用方法小结
2010/09/23 PHP
thinkphp的c方法使用示例
2014/02/24 PHP
PHP中strlen()和mb_strlen()的区别浅析
2014/06/19 PHP
php把大写命名转换成下划线分割命名
2015/04/27 PHP
php的PDO事务处理机制实例分析
2017/02/16 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
PHP微信网页授权的配置文件操作分析
2019/05/29 PHP
js前台分页显示后端JAVA数据响应
2013/03/18 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
微信小程序 视图容器组件的详解及实例代码
2017/01/19 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
2017/02/13 Javascript
vue实现城市列表选择功能
2018/07/16 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
Layui点击图片弹框预览的实现方法
2019/09/16 Javascript
js定时器出现第一次延迟的原因及解决方法
2021/01/04 Javascript
讲解Python中if语句的嵌套用法
2015/05/14 Python
Python计算已经过去多少个周末的方法
2015/07/25 Python
python 捕获shell脚本的输出结果实例
2017/01/04 Python
Python将多份excel表格整理成一份表格
2018/01/03 Python
python利用pandas将excel文件转换为txt文件的方法
2018/10/23 Python
Python命名空间的本质和加载顺序
2018/12/17 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
快速解决vue.js 模板和jinja 模板冲突的问题
2019/07/26 Python
python tkinter图形界面代码统计工具(更新)
2019/09/18 Python
浅谈keras.callbacks设置模型保存策略
2020/06/18 Python
L’Artisan Parfumeur官网:法国香水品牌
2020/08/11 全球购物
AJAX检测用户名是否存在的方法
2021/03/24 Javascript
《值日生》教学反思
2014/02/17 职场文书
评析教师个人的自我评价
2014/02/19 职场文书
岗位职责怎么写
2014/03/14 职场文书
反腐倡廉警示教育活动总结
2014/05/05 职场文书
违反交通安全法检讨书
2014/10/24 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
SQL Server使用T-SQL语句批处理
2022/05/20 SQL Server