返回顶部
首页 > 资讯 > 后端开发 > Python >零基础也能看懂的python内置csv模块教程
  • 933
分享到

零基础也能看懂的python内置csv模块教程

2024-04-02 19:04:59 933人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录csv(Comma-Separated Values)文件是什么?python 中的 csv 文件清晰解法读取文件写入文件csv 文件其它说明csv(Comma-Separate

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

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

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

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

没基础,也可一文看懂 python 中的 csv 模块

下面就对 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 方法将 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})

没基础,也可一文看懂 python 中的 csv 模块

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

sniff(sample, delimiters=None):分析并返回一个 dialect 子类,可以分析出格式参数;

has_header(sample):分析 csv 文件是否存在标题。

以上就是零基础也能看懂的python内置csv模块详解的详细内容,更多关于的python内置模块csv的资料请关注编程网其它相关文章!

--结束END--

本文标题: 零基础也能看懂的python内置csv模块教程

本文链接: https://lsjlt.com/news/157220.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作