关键词:
这篇博客就为你介绍一个知识点,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 csv
with 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_MINIMAL
with 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
:分隔字符,默认为,
;lineterminator
:writer
方法写入数据时,每行的结尾字符,默认为\\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 csv
with 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
方法将 name
与 dialect
关联起来,核心含义相当于给 dialect
起了一个别名。删除也比较简单,使用 csv.unregister_dialect(name)
即可。csv.list_dialects()
返回已经注册的方言名称,你可以在电脑上做一下测试,查看 Python 环境中提供的几种方言。
import csv
csv.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 文件是否存在标题。
java基础面试:一文看懂string类中的常用方法(代码片段)
...出最后一篇文章,准备休假了。本次文章介绍的是Java基础面试常问面试知识点String1、intlength():返回字符串的长度:returnvalue.length2、charcharAt(intindex):返回某索引处的字符returnvalue[i 查看详情
java基础面试:一文看懂string类中的常用方法(代码片段)
...出最后一篇文章,准备休假了。本次文章介绍的是Java基础面试常问面试知识点String1、intlength():返回字符串的长度:returnvalue.length2、charcharAt(intindex):返回某索引处的字符returnvalue[i 查看详情
图解连狗子都能看懂的python基础总结什么是库包模块?(代码片段)
【图解】连狗子都能看懂的Python基础总结!(二)什么是库、包、模块?本章内容什么是模块?什么是包?什么是库?什么是标准库和第三方库?上次,我们解释了“变量”、“数组”、“函数... 查看详情
图解连狗子都能看懂的python基础总结什么是库包模块?(代码片段)
【图解】连狗子都能看懂的Python基础总结!(二)什么是库、包、模块?本章内容什么是模块?什么是包?什么是库?什么是标准库和第三方库?上次,我们解释了“变量”、“数组”、“函数... 查看详情
一文看懂redis6.0多线程io(代码片段)
...迎关注。个人博客网站:一文看懂Redis6.0多线程IORedis基础Redis是什么Redis是一个基于BSD开源的项目,是一个把结构化的数据放在内存中的一个存储系统。你可以把它作为数据库,缓存和消息中间件来使用。同时支持strin... 查看详情
一文看懂rtc中的呼叫服务
1、什么是RTC的呼叫服务RTC呼叫服务就是主叫、被叫的握手协商中介服务。是建立端-端多媒体管道的协商握手过程,用于确定主-被叫建立多媒体通道的意愿、如何建立、多媒体管道参数等信息的协商,属于RTC业务的信令面控制... 查看详情
python字体反爬之乐居字体反爬,一文看懂,一文学会(代码片段)
📢📢📢📢📢📢💗你正在阅读【梦想橡皮擦】的博客👍阅读完毕,可以点点小手赞一下🌻发现错误,直接评论区中指正吧📆橡皮擦的第672篇原创博客从订购之日起,案例5年... 查看详情
一文了解python中的对象比较方法is和==及其本质
1Python中的对象ID我们在学习基础的时候没听说Python有C或C++中的指针啊,Python中指针是什么?先把指针这个概念放一放,一提到指针可能初学C和C++的人都害怕(本人也害怕),先来理解一下Python里面对象的本质。比如下面的代码... 查看详情
一文看懂如何用python查看三维数据(nii.gz格式)的各种图像参数(代码片段)
...MRI数据的大小,值范围,层厚,分辨率等信息一文看懂如何用Python查看三维数据(nii.gz格式)的各种图像参数编程环境:jupyternotebook导入所有安装包importnumpyasnpimportnibabelasnibfromipywidgetsimportinteract,interactive, 查看详情
一文看懂reacthooks
一、Hook简介ReactHooks是从React16.8版本推出的新特性,目的是解决React的状态共享以及组件生命周期管理混乱的问题。ReactHooks的出现标志着,React不会再存在无状态组件的情况,React将只有类组件和函数组件的概念。众所周知,React... 查看详情
pythoncsv模块(读写文件)
...法,代码如下所示:aggs.csv文件内容:2)csv.DictWriter()当然也可使用DictWriter类以字典的形式读写数据,使用示例如下:name.csv文件内容,如下所示:1)csv,reader()csv模块中的reader类和DictReader类用于读取文件中的数据,其中reader()语法... 查看详情
什么是lora技术,lora的优势,lora网关,lora模块一文看懂lora
LoRa简介:物联网应用中的无线技术有多种,可组成局域网或广域网。组成局域网的无线技术主要有2.4GHz的WiFi,蓝牙、Zigbee等,组成广域网的无线技术主要有2G/3G/4G等。这些无线技术,优缺点非常明显,可如下图总结。在低功耗... 查看详情
一文带你了解如何编写测试用例?0基础也能看懂(代码片段)
📢我是小濠,一个快要秃头的测试人📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢我收集了一些软件测试资料,关注我公众号:程序员小濠,免费领取!📢送给大家一句话... 查看详情
06.一文看懂并发编程中的锁
大家好,我是王有志。关注王有志,一起聊技术,聊游戏,从北漂生活谈到国际风云。相信你经常会听到读锁/写锁,公平锁/非公平锁,乐观锁/悲观锁等五花八门的锁,那么每种锁有什么用呢?它们又有什么区别呢?今... 查看详情
小白都能看懂的sql零基础入门,一文带你轻松学会增删改查!(代码片段)
作者简介作者:LuciferLiu,中国DBA联盟(ACDU)成员。目前从事OracleDBA工作,曾从事Oracle数据库开发工作,主要服务于生产制造,汽车金融等行业。现拥有OracleOCP,OceanBaseOBCA认证,擅长Oracle数据库运维开发... 查看详情
一文看懂hashmap(代码片段)
...Map是面试中经常问到的一个知识点,也是判断一个候选人基础是否扎实的标准之一,因为通过HashMap可以引出很多知识点,比如数据结构(数组、链表、红黑树)、equals和hashcode方法,除此之外还可以引出线程安全的问题,HashMap是我... 查看详情
还在纠结要不要学python?一文看懂python主要应用领域和就业前景(代码片段)
Python作为人工智能和数据分析第一语言,使得Python程序员成了当前人才市场的“抢手货”,工资待遇也水涨船高。那么Python到底是什么?Python发展前景好么?Python容易学么?工资高么?技术小白适合学习么... 查看详情
一文带你看懂全志v853开发板原理图(代码片段)
...,本文将对开发板几个主要部件的原理图进行说明,带你一文看懂V853开发板原理图。开发板硬件框图GPIO分配此表格为V853部分重要 查看详情