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命令行参数解析模块optparse使用实例
Apr 13 Python
总结Python中逻辑运算符的使用
May 13 Python
python实现批量监控网站
Sep 09 Python
matplotlib subplots 设置总图的标题方法
May 25 Python
python3实现字符串的全排列的方法(无重复字符)
Jul 07 Python
利用python画出折线图
Jul 26 Python
python排序函数sort()与sorted()的区别
Sep 18 Python
Python爬虫常用库的安装及其环境配置
Sep 19 Python
Python进阶之@property动态属性的实现
Apr 01 Python
Python高级特性——详解多维数组切片(Slice)
Nov 26 Python
3种适用于Python的疯狂秘密武器及原因解析
Apr 29 Python
pycharm Tab键设置成4个空格的操作
Feb 26 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函数utf8转gb2312编码
2006/12/21 PHP
用php过滤危险html代码的函数
2008/07/22 PHP
PHP 最大运行时间 max_execution_time修改方法
2010/03/08 PHP
php权重计算方法代码分享
2014/01/09 PHP
一个经典的PHP文件上传类分享
2014/11/18 PHP
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
2016/03/07 PHP
php 中的closure用法详解
2017/06/12 PHP
Yii框架通过请求组件处理get,post请求的方法分析
2019/09/03 PHP
Javascript remove 自定义数组删除方法
2009/10/20 Javascript
基于Flowplayer打造一款免费的WEB视频播放器附源码
2015/09/06 Javascript
JavaScript中关联原型链属性特性
2016/02/13 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
AngularJS服务service用法总结
2016/12/13 Javascript
Angular 2 ngForm中的ngModel、[ngModel]和[(ngModel)]的写法
2017/06/29 Javascript
underscore之Collections_动力节点Java学院整理
2017/07/10 Javascript
JS手机端touch事件计算滑动距离的方法示例
2017/10/26 Javascript
分析JS单线程异步io回调的特性
2017/12/01 Javascript
微信小程序发送短信验证码完整实例
2019/01/07 Javascript
[02:58]献给西雅图的情书_高清
2014/05/29 DOTA
Python实现数据可视化看如何监控你的爬虫状态【推荐】
2018/08/10 Python
PyQt5实现简单数据标注工具
2019/03/18 Python
详解爬虫被封的问题
2019/04/23 Python
连卡佛中国官网:Lane Crawford中文站
2018/01/27 全球购物
屈臣氏马来西亚官网:Watsons马来西亚
2019/06/15 全球购物
英国Radley包德国官网:Radley London德国
2019/11/18 全球购物
New Balance比利时官方网站:购买鞋子和服装
2021/01/15 全球购物
Eclipse面试题
2014/03/22 面试题
装潢设计实习自我鉴定
2013/09/19 职场文书
幼儿园教师工作制度
2014/01/22 职场文书
新闻编辑专业毕业自荐书范文
2014/02/05 职场文书
仓库管理员岗位职责
2014/03/19 职场文书
青蓝工程实施方案
2014/03/27 职场文书
大学生找工作求职信
2014/07/09 职场文书
灵山大佛导游词
2015/02/04 职场文书
2015夏季作息时间调整通知
2015/04/24 职场文书
win10安装配置nginx的过程
2021/03/31 Servers