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中文编码那些事
Jun 25 Python
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
Nov 19 Python
Python+OpenCV让电脑帮你玩微信跳一跳
Jan 04 Python
Windows环境下python环境安装使用图文教程
Mar 13 Python
Python实现的连接mssql数据库操作示例
Aug 17 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
Sep 13 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
Jul 11 Python
Python networkx包的实现
Feb 14 Python
基于python纯函数实现井字棋游戏
May 27 Python
Python小白垃圾回收机制入门
Jun 09 Python
python 读取.nii格式图像实例
Jul 01 Python
python按照list中字典的某key去重的示例代码
Oct 13 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
全国FM电台频率大全 - 24 贵州省
2020/03/11 无线电
Re:从零开始的异世界生活 第2季 开播啦
2020/07/24 日漫
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
2007/08/26 PHP
php实现统计网站在线人数的方法
2015/05/12 PHP
通过PHP实现用户注册后邮箱验证激活
2020/11/10 PHP
JS网络游戏-(模拟城市webgame)提供的一些例子下载
2007/10/14 Javascript
JavaScript中数组成员的添加、删除介绍
2014/12/30 Javascript
jQuery的bind()方法使用详解
2015/07/15 Javascript
常用javascript表单验证汇总
2020/07/20 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
2016/01/26 Javascript
详解vue嵌套路由-query传递参数
2017/05/23 Javascript
Textarea输入字数限制实例(兼容iOS&安卓)
2017/07/06 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
jQuery读取本地的json文件(实例讲解)
2017/10/31 jQuery
js的继承方法小结(prototype、call、apply)(推荐)
2019/04/17 Javascript
Layui Table js 模拟选中checkbox的例子
2019/09/03 Javascript
解决Angularjs异步操作后台请求用$q.all排列先后顺序问题
2019/11/29 Javascript
[42:04]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第一局
2016/03/03 DOTA
使用python分析git log日志示例
2014/02/27 Python
简单介绍Python中的JSON模块
2015/04/08 Python
tensorflow使用神经网络实现mnist分类
2018/09/08 Python
Python迭代器模块itertools使用原理解析
2019/12/11 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
2020/04/03 Python
如何理解python中数字列表
2020/05/29 Python
Python基于字典实现switch case函数调用
2020/07/22 Python
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
2019/09/09 HTML / CSS
La Redoute英国官网:法国时尚品牌
2017/04/27 全球购物
荷兰DOD药房中文官网:DeOnlineDrogist
2020/12/27 全球购物
多媒体教室标语
2014/06/26 职场文书
绿色环保家庭事迹材料
2014/08/31 职场文书
2014年祖国生日寄语
2014/09/19 职场文书
投资入股合作协议书
2014/10/28 职场文书
骨干教师考核评语
2014/12/31 职场文书
2015毕业实习推荐信
2015/03/23 职场文书
Java基于字符界面的简易收银台
2021/06/26 Java/Android
Java 写一个简单的图书管理系统
2022/04/26 Java/Android