编辑:Python之王

这篇博客就为你介绍一个知识点,python 内置模块 csv 。

csv(Comma-Separated Values)文件是什么?

它是一种文件格式,一般也被叫做逗号分隔值文件,可以使用 Excel 软件或者文本文档打开 。其中数据字段用半角逗号间隔(也可以使用其它字符),使用 Excel 打开时,逗号会被转换为分隔符。csv 文件是以纯文本形式存储了表格数据,并且在兼容各个操作系统。

例如下面的文本,在 excel 中就以表格的形式存在。

sid,name,age
10010,橡皮擦,18
10086,发量迷人的乔喻,19
10000,各位博主,20

下面就对 python 内置模块 csv 的用法进行简单的说明。

python 中的 csv 文件清晰解法

读取文件

使用 csv.reader() 读取 csv 文件内容。

import csv  # 模块导入with open('aa.csv', 'r', newline='', encoding='utf-8') as f:# <_csv.reader object at 0x00000000020918D0>reader = csv.reader(f)for r in reader:print(r)

其中 csv.reader() 方法的原型如下所示:

csv.reader(csvfile, dialect='excel', **fmtparams)

其中的参数 csvfile 可以是任何对象,但要求该对象是一个迭代器,所以文件对象和列表对象都可以传入,如果是文件对象,还要求打开它时携带参数 newline='' 。后面的参数保持默认即可。

第二种方式是使用 DictReader 类,该类实现的效果与 reader() 方法一致,也是接收可迭代对象,返回生成器,差异是将返回的结果放到了一个字典的值内,字典的键就是单元格的标题。并且这样输出的函数是,不需要单独处理 csv 的列头行了。

import csv  # 模块导入with open('aa.csv', 'r', newline='', encoding='utf-8') as f:reader = csv.DictReader(f)for r in reader:print(r)

输出内容:

OrderedDict([('sid', '10010'), ('name', '橡皮擦'), ('age', '18')])
OrderedDict([('sid', '10086'), ('name', '发量迷人的乔喻'), ('age', '19')])
OrderedDict([('sid', '10000'), ('name', '各位博主'), ('age', '20')])

写入文件

csv 文件写入用到的模块方法是 csv.writer(),该方法的原型如下:

csv.writer(csvfile, dialect='excel', **fmtparams)

最基本的写入:

import csvwith open('abc.csv', 'w', newline='') as csvfile:w = csv.writer(csvfile)# 写入列头w.writerow(["sid", "name", "age"])w.writerow(["10010", "橡皮擦", "18"])w.writerow(["10086", "发量迷人的乔喻", "18"])

这时如果你在打开文件时,缺少了 newline='',那写入 csv 文件内容之后,会出现多余的换行。除此之外,我们写入 csv 文件的时候,可以启用 dialect(方言)参数。例如使用 | 作为列的分隔符。此时的文件写入代码写成下述内容:

class my_dialect(csv.Dialect):lineterminator = '\r\n'delimiter = ';'quotechar = '"'quoting = csv.QUOTE_MINIMALwith open('abc.csv', 'w', newline='') as csvfile:w = csv.writer(csvfile, dialect=my_dialect)# 写入列头w.writerow(["sid", "name", "age"])w.writerow(["10010", "橡皮擦", "18"])w.writerow(["10086", "发量迷人的乔喻", "18"])

上述代码定义了一个新的类 my_dialect,并使其继承 csv.Dialect 类,重写了其中的部分字段。

  • delimiter:分隔字符,默认为 ,;- lineterminatorwriter 方法写入数据时,每行的结尾字符,默认为 \r\n;- quotechar:单字符,用于包裹具有特殊字符的字段,例如 定界符引号字符换行符,默认是 ";- quoting:控制 writer 何时生成引号,以及 reader 何时识别引号,默认是 QUOTE_MINIMAL,其余几个值分别是 QUOTE_ALL(全部加引号)QUOTE_MINIMAL(特定情况加)QUOTE_NONNUMERIC(所有非数字加)QUOTE_NONE(都不加)Writer 对象的方法说明:

  • csvwriter.writerow(row):写入单行;- csvwriter.writerows(rows):写入多行

import csv  # 模块导入csv_headers = ['name', 'age']
rows = [('橡皮擦', 18),('发量迷人的乔喻', 19),('各位博主', 20)]with open('./aa.csv', 'w', encoding='utf-8',newline='') as f:csv_file = csv.writer(f)csv_file.writerow(csv_headers)  # 写入头csv_file.writerows(rows)

DictReader 类使用方法差不多,还存在一个 DictWriter 类,该类将以字段格式写入 csv 文件字段。

import csvwith open('abc.csv', 'w', newline='') as csvfile:w = csv.DictWriter(csvfile, fieldnames=['sid', 'name', 'age'])w.writeheader()  # 写入列头w.writerow({<!-- -->'sid': '10010', 'name': '橡皮擦', 'age': 18})w.writerow({<!-- -->'sid': '10010', 'name': '橡皮擦', 'age': 18})w.writerow({<!-- -->'sid': '10010', 'name': '橡皮擦', 'age': 18})

上述代码尤其注意 fieldnames 参数是必填参数,表示的是列头,并且在写入正式数据前,需使用 w.writeheader() 写入列头。

csv 文件其它说明

关于 csv 方言,可以使用 csv.register_dialect 方法将 namedialect 关联起来,核心含义相当于给 dialect 起了一个别名。删除也比较简单,使用 csv.unregister_dialect(name) 即可。csv.list_dialects() 返回已经注册的方言名称,你可以在电脑上做一下测试,查看 Python 环境中提供的几种方言。

import csvcsv.register_dialect('ca', delimiter='|', quoting=csv.QUOTE_MINIMAL)
with open('abc.csv', 'w', newline='') as csvfile:w = csv.DictWriter(csvfile, fieldnames=['sid', 'name', 'age'], dialect='ca')w.writeheader()  # 写入列头w.writerow({<!-- -->'sid': '10010', 'name': '橡皮擦', 'age': 18})w.writerow({<!-- -->'sid': '10010', 'name': '橡皮擦', 'age': 18})w.writerow({<!-- -->'sid': '10010', 'name': '橡皮擦', 'age': 18})

csv 模块还提供了 csv.Sniffer 类,用于推断 csv 文件的格式,其存在两个方法:

  • sniff(sample, delimiters=None):分析并返回一个 dialect 子类,可以分析出格式参数;- has_header(sample):分析 csv 文件是否存在标题。

推荐阅读:

我的2022届互联网校招分享

我的2021总结

浅谈算法岗和开发岗的区别

互联网校招研发薪资汇总

2022届互联网求职现状,金9银10快变成铜9铁10!!

公众号:AI蜗牛车

保持谦逊、保持自律、保持进步

发送【蜗牛】获取一份《手把手AI项目》(AI蜗牛车著)

发送【1222】获取一份不错的leetcode刷题笔记

发送【AI四大名著】获取四本经典AI电子书

详解python 中的 csv 模块相关推荐

  1. 【pickle】详解python中的pickle模块(常用函数、示例)

    1.序列化.反序列化介绍 序列化:把对象转换为字节序列的过程称为对象的序列化. 反序列化:把字节序列恢复为对象的过程称为对象的反序列化. 2.pickle模块说明 python中的pickle模块实现 ...

  2. 详解Python中函数和模块的特殊属性__annotations__

    众所周知,Python是一种动态类型语言,也是强类型语言.在Python语言中,使用变量之前不需要声明其类型,直接赋值即可创建变量,变量初始类型取决于等号右侧表达式的值的类型.创建之后,变量的类型可以 ...

  3. 详解Python中的itertools模块

    itertools模块的介绍 在Python中,迭代器(Iterator)是常用来做惰性序列的对象,只有当迭代到某个值的时候,才会进行计算得出这个值.因此,迭代器可以用来存储无限大的序列,这样我们就不 ...

  4. python 中cookie_详解Python中的Cookie模块使用

    最近在用GAE开发自己的博客程序.虽然GAE的API没有显式的提供操作Cookie的方法,但他现有的架构,使我们有足够的自由来操作Cookie. Cookie 模块,顾名思义,就是用来操作Cookie ...

  5. python 文件流转base64_详解Python中使用base64模块来处理base64编码的方法

    base64模块是用来作base64编码解码的.这种编码方式在电子邮件中是很常见的. 它可以把不能作为文本显示的二进制数据编码为可显示的文本信息.编码后的文本大小会增大1/3. 闲话不说了,base6 ...

  6. python中heapq的库是什么_详解Python中heapq模块的用法

    详解Python中heapq模块的用法 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  详解Python中heapq模块的用法.txt ] (友情提示:右键点上行t ...

  7. pythonnamedtuple定义类型_详解Python中namedtuple的使用

    namedtuple是Python中存储数据类型,比较常见的数据类型还有有list和tuple数据类型.相比于list,tuple中的元素不可修改,在映射中可以当键使用. namedtuple: na ...

  8. python namedtuple用法_详解Python中namedtuple的使用

    namedtuple是Python中存储数据类型,比较常见的数据类型还有有list和tuple数据类型.相比于list,tuple中的元素不可修改,在映射中可以当键使用. namedtuple: na ...

  9. python中break怎么用_详解Python中break语句的用法

    详解Python中break语句的用法 在Python中的break语句终止当前循环,继续执行下一个语句,就像C语言中的break一样. break最常见的用途是当一些外部条件被触发,需要从一个循环中 ...

最新文章

  1. 2012-5-3 线程和进程的区别
  2. javascript onsubmit返回false仍然能提交_JavaScript对象-Get和Put
  3. 企业建设什么样的网站才能符合用户?
  4. JavaEE Tutorials (17) - Java消息服务示例
  5. 如何修改7 服务器配置,centos7修改服务器配置
  6. IOS 传值方法总结
  7. 手机锁屏js倒计时停止问题解决办法探索
  8. python语言能做什么-python语言能做什么
  9. access如何设置定期报表汇总_Access如何制作复杂报表
  10. 【HTML+CSS】字体字号行高
  11. 创建一个简单OIO模式的socket服务端
  12. H3CSE园区-RRPP
  13. 系统的入门脑机接口神经科学,一个网站就够了 - NeuroTechEDU
  14. 成长经历:DIV标签设置背景色,没有显示背景色
  15. grread使用例子 lisp_Autolisp编程心得
  16. 令人惊艳的80个免费学习网站,每一个都备受好评!
  17. 现代人遇到鸿蒙碎片,原来我是盖世奶爸-第126章 虚空之门是鸿蒙鼎碎片?
  18. [生成函数阶段性小结][CF891E]Lust
  19. ElasticSearch集群安装教程
  20. 虚拟主机绑定多个网站htaccess写法

热门文章

  1. redis主从同步概念及配置
  2. 500内别怕选不到优秀的蓝牙耳机,2021平价高性价比蓝牙耳机推荐
  3. 21、487-3279
  4. 笑话之---男追女之九阴真经
  5. 色差仪在药品溶液颜色品质管控的应用
  6. 小狐狸ChatGPT付费创作系统1.92独立版 + H5端 + 小程序前端+新增AI绘画功能 系统源码体验安装教程
  7. 手把手教你我是如何用H5制作工具在微信上宣传我的店铺
  8. python中的数组下标
  9. c# 在word中插入表格
  10. 如何将FLAC格式转为MP3格式