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 相关文章推荐
PyGame贪吃蛇的实现代码示例
Nov 21 Python
从运行效率与开发效率比较Python和C++
Dec 14 Python
python实现学员管理系统
Feb 26 Python
Python Django切换MySQL数据库实例详解
Jul 16 Python
Mac安装python3的方法步骤
Aug 09 Python
python实现七段数码管和倒计时效果
Nov 23 Python
Python PyInstaller库基本使用方法分析
Dec 12 Python
python os模块常用的29种方法使用详解
Jun 02 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
Jul 18 Python
详解非极大值抑制算法之Python实现
Jun 28 Python
python读取mnist数据集方法案例详解
Sep 04 Python
Python实现视频自动打码的示例代码
Apr 08 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
用PHP连接Oracle for NT 远程数据库
2006/10/09 PHP
PHP学习资料汇总与网址
2007/03/16 PHP
jquery获取多个checkbox的值异步提交给php的方法
2015/06/24 PHP
用PHP代码给图片加水印
2015/07/01 PHP
PHP 微信支付类 demo
2015/11/30 PHP
PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
2019/05/13 PHP
prototype class详解
2006/09/07 Javascript
JavaScript 对象成员的可见性说明
2009/10/16 Javascript
js数值计算时使用parseInt进行数据类型转换(jquery)
2014/10/07 Javascript
浅谈类似于(function(){}).call()的js语句
2015/03/30 Javascript
jQuery增加自定义函数的方法
2015/07/18 Javascript
Nodejs学习item【入门手上】
2016/05/05 NodeJs
JS实现环形进度条(从0到100%)效果
2016/07/05 Javascript
js实现上传文件添加和删除文件选择框
2016/10/24 Javascript
JS双击变input框批量修改内容
2016/12/12 Javascript
Node.js中的cluster模块深入解读
2018/06/11 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
python类型强制转换long to int的代码
2013/02/10 Python
Django添加KindEditor富文本编辑器的使用
2018/10/24 Python
keras .h5转移动端的.tflite文件实现方式
2020/05/25 Python
Python selenium模块实现定位过程解析
2020/07/09 Python
详解Pandas 处理缺失值指令大全
2020/07/30 Python
Python利用命名空间解析XML文档
2020/08/10 Python
Python unittest如何生成HTMLTestRunner模块
2020/09/08 Python
详解HTML5中CSS外观属性
2020/09/10 HTML / CSS
英国领先的电子、技术和办公用品购物网站:Ebuyer
2018/04/04 全球购物
美国翻新电子产品商店:The Store
2019/10/08 全球购物
台湾7-ELEVEN线上购物中心:7-11
2021/01/21 全球购物
出国签证在职证明
2014/01/16 职场文书
仓库管理员岗位职责
2014/03/19 职场文书
学生党员一帮一活动总结
2014/07/08 职场文书
七一建党日演讲稿
2014/09/05 职场文书
预备党员自我批评思想汇报
2014/10/10 职场文书
家庭教育培训学习心得体会
2016/01/14 职场文书
详解java如何集成swagger组件
2021/06/21 Java/Android
使用Spring处理x-www-form-urlencoded方式
2021/11/02 Java/Android