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获取GY-85九轴模块信息示例
Dec 05 Python
Python中用pycurl监控http响应时间脚本分享
Feb 02 Python
Python中解析JSON并同时进行自定义编码处理实例
Feb 08 Python
使用Python中的greenlet包实现并发编程的入门教程
Apr 16 Python
在Python的Django框架中用流响应生成CSV文件的教程
May 02 Python
基于Python中numpy数组的合并实例讲解
Apr 04 Python
Python匿名函数及应用示例
Apr 09 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
Jun 21 Python
opencv python 图像轮廓/检测轮廓/绘制轮廓的方法
Jul 03 Python
详解使用python绘制混淆矩阵(confusion_matrix)
Jul 14 Python
python3代码中实现加法重载的实例
Dec 03 Python
python实现学生信息管理系统源码
Feb 22 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的curl实现get和post的代码
2008/08/23 PHP
在项目中寻找代码的坏命名
2012/07/14 PHP
php中通过curl检测页面是否被百度收录
2013/09/27 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
2014/03/12 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
2014/05/04 PHP
php批量删除cookie的简单实现方法
2015/01/26 PHP
百度工程师讲PHP函数的实现原理及性能分析(二)
2015/05/13 PHP
详解php用static方法的原因
2018/09/12 PHP
『jQuery』名称冲突使用noConflict方法解决
2013/04/22 Javascript
jquery解析JSON数据示例代码
2014/03/17 Javascript
详解JavaScript中undefined与null的区别
2014/03/29 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
avalonjs制作响应式瀑布流特效
2015/05/06 Javascript
基于JavaScript代码实现兼容各浏览器的设为首页和加入收藏
2016/01/07 Javascript
Jquery实现纵向横向菜单
2016/01/24 Javascript
js获取当前年月日-YYYYmmDD格式的实现代码
2016/06/01 Javascript
angular之ng-template模板加载
2017/11/09 Javascript
Vue响应式原理深入解析及注意事项
2017/12/11 Javascript
详解vue mixins和extends的巧妙用法
2017/12/20 Javascript
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
2019/02/18 Javascript
react高阶组件添加和删除props
2019/04/26 Javascript
解决vue-cli 打包后自定义动画未执行的问题
2019/11/12 Javascript
js实现简单进度条效果
2020/03/25 Javascript
简单解析Django框架中的表单验证
2015/07/17 Python
浅谈Python中列表生成式和生成器的区别
2015/08/03 Python
Python简单的制作图片验证码实例
2017/05/31 Python
python简单图片操作:打开\显示\保存图像方法介绍
2017/11/23 Python
Python3中的json模块使用详解
2018/05/05 Python
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
DJI大疆无人机官方商城:全球领先的无人飞行器研发和生产商
2016/12/21 全球购物
New Balance波兰官方商城:始于1906年,百年慢跑品牌
2017/08/15 全球购物
G-Form护具官方网站:美国运动保护装备
2019/09/04 全球购物
高一政治教学反思
2014/01/28 职场文书
2014离婚协议书范文
2014/09/10 职场文书
90后经典动画片排行:《数码宝贝》第二,《小鲤鱼历险记》在榜
2022/03/18 日漫