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中sets模块的用法实例
Sep 30 Python
Python3中的2to3转换工具使用示例
Jun 12 Python
Python中functools模块的常用函数解析
Jun 30 Python
Django与JS交互的示例代码
Aug 23 Python
Python 监测文件是否更新的方法
Jun 10 Python
Python自定义一个异常类的方法
Jun 27 Python
pytorch逐元素比较tensor大小实例
Jan 03 Python
Python模块的定义,模块的导入,__name__用法实例分析
Jan 07 Python
win10安装tensorflow-gpu1.8.0详细完整步骤
Jan 20 Python
python图形开发GUI库wxpython使用方法详解
Feb 14 Python
从python读取sql的实例方法
Jul 21 Python
matplotlib画混淆矩阵与正确率曲线的实例代码
Jun 01 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中session的实现原理以及大网站应用应注意的问题
2013/06/17 PHP
php 在windows下配置虚拟目录的方法介绍
2013/06/26 PHP
php实现事件监听与触发的方法
2014/11/21 PHP
smarty模板引擎中自定义函数的方法
2015/01/22 PHP
php将日期格式转换成xx天前的格式
2015/04/16 PHP
非常有用的9个PHP代码片段
2016/04/06 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
PHPExcel实现的读取多工作表操作示例
2020/04/14 PHP
20行代码实现的一个CSS覆盖率测试脚本
2013/07/07 Javascript
通过location.replace禁止浏览器后退防止重复提交
2014/09/04 Javascript
JavaScript中的getMilliseconds()方法使用详解
2015/06/10 Javascript
bootstrap轮播图示例代码分享
2017/05/17 Javascript
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
js实现图片放大并跟随鼠标移动特效
2019/01/18 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
2019/05/28 Javascript
快速解决vue2+vue-cli3项目ie兼容的问题
2020/11/17 Vue.js
Python中的choice()方法使用详解
2015/05/15 Python
python控制台中实现进度条功能
2015/11/10 Python
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
python设置值及NaN值处理方法
2018/07/03 Python
Python使用requests提交HTTP表单的方法
2018/12/26 Python
Django 反向生成url实例详解
2019/07/30 Python
pandas如何处理缺失值
2019/07/31 Python
python实现简易学生信息管理系统
2020/04/05 Python
pygame实现贪吃蛇游戏(上)
2019/10/29 Python
Python如何实现动态数组
2019/11/02 Python
Python with语句和过程抽取思想
2019/12/23 Python
想学画画?python满足你!
2020/12/24 Python
CSS3中各种颜色属性的使用教程
2016/05/17 HTML / CSS
Html5画布_动力节点Java学院整理
2017/07/13 HTML / CSS
全国优秀教师事迹材料
2014/08/26 职场文书
合同纠纷调解书
2015/05/20 职场文书
黑暗中的舞者观后感
2015/06/18 职场文书
Nginx服务器如何设置url链接
2021/03/31 Servers
python引入其他文件夹下的py文件具体方法
2021/05/23 Python
html form表单基础入门案例讲解
2021/07/15 HTML / CSS