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 相关文章推荐
非递归的输出1-N的全排列实例(推荐)
Apr 11 Python
Python中类的初始化特殊方法
Dec 01 Python
Django实现支付宝付款和微信支付的示例代码
Jul 25 Python
深入浅析Python中list的复制及深拷贝与浅拷贝
Sep 03 Python
一百多行python代码实现抢票助手
Sep 25 Python
python opencv读mp4视频的实例
Dec 07 Python
python爬虫 爬取58同城上所有城市的租房信息详解
Jul 30 Python
PyQt 图解Qt Designer工具的使用方法
Aug 06 Python
使用Django搭建一个基金模拟交易系统教程
Nov 18 Python
Python-opencv 双线性插值实例
Jan 17 Python
基于Pyinstaller打包Python程序并压缩文件大小
May 28 Python
python中round函数保留两位小数的方法
Dec 04 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图片上传程序
2008/03/27 PHP
CentOS6.5 编译安装lnmp环境
2014/12/21 PHP
PHP的openssl加密扩展使用小结(推荐)
2016/07/18 PHP
SWFObject Flash js调用类
2008/07/08 Javascript
JS OOP包机制,类创建的方法定义
2009/11/02 Javascript
javascript控制frame,iframe的src属性代码
2009/12/31 Javascript
编写高性能的JavaScript 脚本的加载与执行
2010/04/19 Javascript
通过jQuery源码学习javascript(二)
2012/12/27 Javascript
JQuery控制radio选中和不选中方法总结
2015/04/15 Javascript
JS动画效果打开、关闭层的实现方法
2015/05/09 Javascript
javascript数据类型详解
2017/02/07 Javascript
纯js实现动态时间显示
2020/09/07 Javascript
JavaScript中最常用的10种代码简写技巧总结
2017/06/28 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
JS严格模式知识点总结
2018/02/27 Javascript
vue-cli webpack 引入swiper的操作方法
2018/09/15 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
2018/10/31 Javascript
js canvas实现二维码和图片合成的海报
2020/11/19 Javascript
socket在egg中的使用实例代码详解
2019/05/30 Javascript
node实现爬虫的几种简易方式
2019/08/22 Javascript
vue实现两个组件之间数据共享和修改操作
2020/11/12 Javascript
[48:54]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第二场 6.3
2018/06/04 DOTA
剖析Python的Twisted框架的核心特性
2016/05/25 Python
Python实现的从右到左字符串替换方法示例
2018/07/06 Python
Python设计模式之桥接模式原理与用法实例分析
2019/01/10 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
2019/03/23 Python
佳能加拿大网上商店:Canon eStore Canada
2018/04/04 全球购物
创业计划书如何吸引他人眼球
2014/01/10 职场文书
连带责任保证书
2014/04/29 职场文书
幼儿教师师德承诺书
2014/05/23 职场文书
校园新闻广播稿5篇
2014/10/10 职场文书
平安家庭事迹材料
2014/12/20 职场文书
结婚通知短信怎么写
2015/04/17 职场文书
2015年大学生党员承诺书
2015/04/27 职场文书
Go 自定义package包设置与导入操作
2021/05/06 Golang
python多线程方法详解
2022/01/18 Python