没基础,也可一文看懂python中的csv模块(代码片段)

梦想橡皮擦 梦想橡皮擦     2023-02-01     715

关键词:

这篇博客就为你介绍一个知识点,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:分隔字符,默认为 ,
  • 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 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 方法将 namedialect 关联起来,核心含义相当于给 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基础也能看懂(代码片段)

📢我是小濠,一个快要秃头的测试人📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢我收集了一些软件测试资料,关注我公众号:程序员小濠,免费领取!📢送给大家一句话&#x... 查看详情

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部分重要 查看详情