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面向对象编程基础解析(二)
Oct 26 Python
python放大图片和画方格实现算法
Mar 30 Python
python一行sql太长折成多行并且有多个参数的方法
Jul 19 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
Oct 26 Python
使用Python实现正态分布、正态分布采样
Nov 20 Python
matplotlib绘制多个子图(subplot)的方法
Dec 03 Python
python标准库sys和OS的函数使用方法与实例详解
Feb 12 Python
TFRecord文件查看包含的所有Features代码
Feb 17 Python
python批量替换文件名中的共同字符实例
Mar 05 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
Mar 06 Python
Django自定义YamlField实现过程解析
Nov 11 Python
使用python操作lmdb对数据读取的实例
Dec 11 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实现上传图片保存到数据库的方法
2015/02/11 PHP
php parse_str() 函数的定义和用法
2016/05/23 PHP
提高代码性能技巧谈—以创建千行表格为例
2006/07/01 Javascript
主页面中的两个iframe实现鼠标拖动改变其大小
2013/04/16 Javascript
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
2013/05/08 Javascript
封装的jquery翻页滚动(示例代码)
2013/11/18 Javascript
js中通过父级进行查找定位元素
2014/06/15 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
2015/10/27 Javascript
jQuery添加和删除输入文本框标签代码
2016/05/20 Javascript
利用jsonp跨域调用百度js实现搜索框智能提示
2016/08/24 Javascript
JS中事件冒泡和事件捕获介绍
2016/12/13 Javascript
JavaScript实现获取用户单击body中所有A标签内容的方法
2017/06/05 Javascript
vue实现全选、反选功能
2020/11/17 Javascript
JS判断微信扫码的方法
2017/08/07 Javascript
编写React组件项目实践分析
2018/03/04 Javascript
vue之浏览器存储方法封装实例
2018/03/15 Javascript
js canvas实现5张图片合成一张图片
2019/07/15 Javascript
JS严格模式原理与用法实例分析
2020/04/27 Javascript
js 动态校验开始结束时间的实现代码
2020/05/25 Javascript
vuecli3.x中轻松4步带你使用tinymce的步骤
2020/06/25 Javascript
深度解读vue-resize的具体用法
2020/07/08 Javascript
原生JS实现多条件筛选
2020/08/19 Javascript
python中的多重继承实例讲解
2014/09/28 Python
解析Python中的二进制位运算符
2015/05/13 Python
python 用正则表达式筛选文本信息的实例
2018/06/05 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
2020/01/20 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
2020/05/24 Python
使用Canvas操作像素的方法
2018/06/14 HTML / CSS
英国厨房与餐具用品为主的设计品牌:Joseph Joseph
2018/04/26 全球购物
台湾SHOPRO购物行家:亚洲首创影视.3C.家电.优质购物平台
2018/05/07 全球购物
波兰灯具、照明和LED购物网站:Lampy.pl
2019/03/11 全球购物
电气自动化自荐信
2013/10/10 职场文书
毕业典礼主持词大全
2014/03/26 职场文书
担保书格式及范文
2014/04/01 职场文书
mysqldump进行数据备份详解
2022/07/15 MySQL