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 相关文章推荐
仅用500行Python代码实现一个英文解析器的教程
Apr 02 Python
python执行等待程序直到第二天零点的方法
Apr 23 Python
python实现类的静态变量用法实例
May 08 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
Mar 16 Python
Python算法之求n个节点不同二叉树个数
Oct 27 Python
Python多进程写入同一文件的方法
Jan 14 Python
python获取array中指定元素的示例
Nov 26 Python
python清空命令行方式
Jan 13 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
Feb 27 Python
解决Python在导入文件时的FileNotFoundError问题
Apr 10 Python
基于Python下载网络图片方法汇总代码实例
Jun 24 Python
Python实现给PDF添加水印的方法
Jan 25 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+DBM的同学录程序(2)
2006/10/09 PHP
上传多个文件的PHP脚本
2006/11/26 PHP
php数字游戏 计算24算法
2012/06/10 PHP
zf框架的zend_cache缓存使用方法(zend框架)
2014/03/14 PHP
yii使用activeFileField控件实现上传文件与图片的方法
2015/12/28 PHP
Laravel中服务提供者和门面模式的入门介绍
2017/11/06 PHP
让您的菜单不离网站
2006/10/03 Javascript
云网广告中的代码,提示出错,大家找找
2006/11/21 Javascript
JavaScript高级程序设计阅读笔记(六) ECMAScript中的运算符(二)
2012/02/27 Javascript
js整数字符串转换为金额类型数据(示例代码)
2013/12/26 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
js中日期的加减法
2015/05/06 Javascript
JavaScript实现文字跟随鼠标特效
2015/08/06 Javascript
jquery背景跟随鼠标滑动导航
2015/11/20 Javascript
jQuery手指滑动轮播效果
2016/12/22 Javascript
Webpack如何引入bootstrap的方法
2017/06/17 Javascript
JavaScript你不知道的一些数组方法
2017/08/18 Javascript
JavaScript实现一个带AI的井字棋游戏源码
2018/05/21 Javascript
swiper在angularjs中使用循环轮播失效的解决方法
2018/09/27 Javascript
Vue中实现权限控制的方法示例
2019/06/07 Javascript
Vue组件基础用法详解
2020/02/05 Javascript
Python发送邮件功能示例【使用QQ邮箱】
2018/12/04 Python
python实现windows壁纸定期更换功能
2019/01/21 Python
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
2019/01/23 Python
Python : turtle色彩控制实例详解
2020/01/19 Python
Python绘图实现台风路径可视化代码实例
2020/10/23 Python
python 实现图片裁剪小工具
2021/02/02 Python
HTML5 绘制图像(上)之:关于canvas元素引领下一代web页面的问题
2013/04/24 HTML / CSS
中国最大的潮流商品购物网站:YOHO!BUY有货
2017/01/07 全球购物
Reformation官网:美国女装品牌
2018/09/14 全球购物
保安部任务及岗位职责
2014/02/25 职场文书
高中竞选班长演讲稿
2014/04/24 职场文书
公司更名通知函
2015/04/24 职场文书
基于python的matplotlib制作双Y轴图
2021/04/20 Python
使用Docker容器部署rocketmq单机的全过程
2022/04/03 Servers
Mysql 8.x 创建用户以及授予权限的操作记录
2022/04/18 MySQL