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随机生成一个6位的验证码代码分享
Mar 24 Python
将Python中的数据存储到系统本地的简单方法
Apr 11 Python
Python中的多行注释文档编写风格汇总
Jun 16 Python
Python使用PDFMiner解析PDF代码实例
Mar 27 Python
django 创建过滤器的实例详解
Aug 14 Python
python画图把时间作为横坐标的方法
Jul 07 Python
Python3操作Excel文件(读写)的简单实例
Sep 02 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
Dec 04 Python
python实现tail实时查看服务器日志示例
Dec 24 Python
python的reverse函数翻转结果为None的问题
May 11 Python
如何利用python web框架做文件流下载的实现示例
Jun 02 Python
Python如何重新加载模块
Jul 29 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
Win9x/ME下Apache+PHP安装配置
2006/10/09 PHP
如何在PHP中使用Oracle数据库(4)
2006/10/09 PHP
小文件php+SQLite存储方案
2010/09/04 PHP
PHP获取指定日期是星期几的实现方法
2016/11/30 PHP
怎么用javascript进行拖拽
2006/07/20 Javascript
Javascript实例教程(19) 使用HoTMetal(2)
2006/12/23 Javascript
setTimeout和setInterval的区别你真的了解吗?
2011/03/31 Javascript
js对文章内容进行分页示例代码
2014/03/05 Javascript
ExtJS4利根据登录后不同的角色分配不同的树形菜单
2014/05/02 Javascript
script标签属性用type还是language
2015/01/21 Javascript
常用的JavaScript WEB操作方法分享
2015/02/28 Javascript
详解jQuery Mobile自定义标签
2016/01/06 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
第十篇BootStrap轮播插件使用详解
2016/06/21 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
2017/10/26 Javascript
fetch 使用及如何接收JS传值
2017/11/11 Javascript
Node.js中,在cmd界面,进入退出Node.js运行环境的方法
2018/05/12 Javascript
vue-router中的hash和history两种模式的区别
2018/07/17 Javascript
electron踩坑之dialog中的callback解决
2020/10/06 Javascript
Vue 打包的静态文件不能直接运行的原因及解决办法
2020/11/19 Vue.js
删除python pandas.DataFrame 的多重index实例
2018/06/08 Python
Python subprocess库的使用详解
2018/10/26 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
Python批量删除只保留最近几天table的代码实例
2019/04/01 Python
Python 实现微信防撤回功能
2019/04/29 Python
Python实现查找数据库最接近的数据
2020/06/08 Python
Python数据分析库pandas高级接口dt的使用详解
2020/12/11 Python
HTML5调用手机摄像头拍照的实现思路及代码
2014/06/15 HTML / CSS
美国折扣地毯销售网站:Rugs.com
2020/03/27 全球购物
网络体系结构及协议的定义
2014/03/13 面试题
实习生岗位职责
2014/04/12 职场文书
群众路线表态发言材料
2014/10/17 职场文书
杭白菊导游词
2015/02/10 职场文书
学术会议通知范文
2015/04/15 职场文书
学生会工作感言
2015/08/07 职场文书