壹 简介
逗号分隔值(Comma-Separated Values,CSV,也称为字符分隔值,分隔字符也可以不是逗号),是电子表格和数据库中最常见的输入、输出文件格式。
- 保存形式
其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。
- 分隔符号
CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。
- 打开方式
通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。建议使用WORDPAD或是记事本来开启,再则先另存新档后用EXCEL开启,也是方法之一。
csv
模块实现了 CSV 格式表单数据的读写。其提供了诸如以兼容 Excel 的方式输出数据文件或读取 Excel 程序输出的数据文件的功能,程序员无需知道 Excel 所采用 CSV 格式的细节。此模块同样可以用于定义其他应用程序可用的 CSV 格式或定义特定需求的 CSV 格式。
贰 安装
内置库,不需要安装。
查看所有类和方法
import csv
print(dir(csv))
['Dialect', 'DictReader', 'DictWriter', 'Error', 'QUOTE_ALL', 'QUOTE_MINIMAL', 'QUOTE_NONE', 'QUOTE_NONNUMERIC', 'Sniffer', 'StringIO', '_Dialect', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '__version__', 'excel', 'excel_tab', 'field_size_limit', 'get_dialect', 'list_dialects', 're', 'reader', 'register_dialect', 'unix_dialect', 'unregister_dialect', 'writer']
叁 类说明
3.1 csv.reader
- a.功能
返回一个 reader 对象,该对象将逐行遍历 csvfile。
- b.方法格式
csv.reader(csvfile, dialect='excel', **fmtparams)
- c.参数说明
csvfile
可以是任何对象,只要这个对象支持 iterator 协议并在每次调用 __next__()
方法时都返回字符串,文件对象 和列表对象均适用。如果 csvfile 是文件对象,则打开它时应使用 newline=''
。dialect
是用于不同的 CSV 变种的特定参数组。它可以是 Dialect 类的子类的实例,也可以是 list_dialects()
函数返回的字符串之一。fmtparams
可以覆写当前变种格式中的单个格式设置。有关变种和格式设置参数的完整详细信息。
3.2 csv.writer
- a.功能
返回一个 writer 对象,该对象负责将用户的数据在给定的文件类对象上转换为带分隔符的字符串。
- b.方法格式
csv.writer(csvfile, dialect='excel', **fmtparams)
- c.参数说明
csvfile
可以是任何具有 write() 方法的对象。 如果 csvfile 是一个文件对象,则打开它时应使用 newline=’’ 1。dialect
形参用来定义一组特定 CSV 变种专属的形参。 它可以是 Dialect 类的某个子类的实例或是 list_dialects()
函数所返回的字符串之一。fmtparams
关键字参数来覆盖当前变种中的单个格式化形参。 有关各个变种和格式化形参的完整细节。为了尽量简化与实现 DB API 的模块之间的接口,None 值会被当作空字符串写入。 虽然这个转换是不可逆的,但它可以简化 SQL NULL 数据值到 CSV 文件的转储而无需预处理从 cursor.fetch*
调用返回的数据。 在被写入之前所有其他非字符串数据都会先用 str()
来转转为字符串。
3.3 csv.DictReader
- a.功能
创建一个对象,该对象在操作上类似于常规 reader,但是将每行中的信息映射到一个 dict,该 dict 的键由 fieldnames 可选参数给出。
- b.方法格式
csv.DictReader(f, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds)
- c.参数说明
fieldnames
参数是一个 sequence。如果省略 fieldnames,则文件 f 第一行中的值将用作字段名。无论字段名是如何确定的,字典都将保留其原始顺序。
如果某一行中的字段多于字段名,则剩余数据会被放入一个列表,并与 restkey
所指定的字段名 (默认为 None) 一起保存。 如果某个非空白行的字段少于字段名,则缺失的值会使用 restval 的值来填充 (默认为 None)。
3.4 csv.DictWriter
- a.功能
创建一个对象,该对象在操作上类似于常规 reader,但是将每行中的信息映射到一个 dict,该 dict 的键由 fieldnames 可选参数给出。
- b.方法格式
class csv.DictWriter(f, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)
- c.参数说明
fieldnames
参数是由键组成的 序列,它指定字典中值的顺序,这些值会按指定顺序传递给writerow()
方法并写入文件 f。 如果字典缺少 fieldnames
中的键,则可选参数 restval 用于指定要写入的值。 如果传递给writerow()
方法的字典的某些键在fieldnames
中找不到,则可选参数extrasaction
用于指定要执行的操作。 如果将其设置为默认值 raise
,则会引发ValueError
。 如果将其设置为ignore
,则字典中的其他键值将被忽略。 所有其他可选或关键字参数都传递给底层的writer
实例。
肆 常量说明
csv.QUOTE_ALL
是指示 writer 对象给所有字段加上引号。csv.QUOTE_MINIMAL
是指示 writer 对象仅为包含特殊字符(例如 定界符、引号字符 或 行结束符 中的任何字符)的字段加上引号。csv.QUOTE_NONNUMERIC
是指示 writer 对象为所有非数字字段加上引号。指示 reader 将所有未用引号引出的字段转换为 float 类型。csv.QUOTE_NONE
是指示 writer 对象不使用引号引出字段。当 定界符 出现在输出数据中时,其前面应该有 转义符。如果未设置 转义符,则遇到任何需要转义的字符时,writer 都会抛出 Error 异常。指示 reader 不对引号字符进行特殊处理。exception csv.Error
是该异常可能由任何发生错误的函数抛出。
肆 方法说明
4.1 field_size_limit
a.功能
返回解析器当前允许的最大字段大小。如果指定了new_limit
,则它将成为新的最大字段大小。b.方法格式
csv.field_size_limit([new_limit])
4.2 get_dialect
a.功能
返回 name 对应的变种。如果 name 不是已注册的变种名称,则抛出 Error 异常。该函数返回的是不可变的 Dialect 对象。b.方法格式
csv.get_dialect(name)
4.3 list_dialects
a.功能
返回所有已注册变种的名称。b.方法格式
csv.list_dialects()
4.4 register_dialect
a.功能
将 dialect 与 name 关联起来。 name 必须是字符串。 变种的指定可以通过传入一个 Dialect 的子类,或通过 fmtparams 关键字参数,或是两者同时传入,此时关键字参数会覆盖 dialect 形参。b.方法格式
csv.register_dialect(name[, dialect[, **fmtparams]])
4.5 unregister_dialect
a.功能
从变种注册表中删除 name 对应的变种。如果 name 不是已注册的变种名称,则抛出 Error 异常。b.方法格式
csv.unregister_dialect(name)
伍 例子
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 导入CSV安装包
import csv
# 1. 创建文件对象,防止在输出的时候出现空行,需要加newline=''
f = open('文件名.csv','w',encoding='utf-8',newline='')
# 2. 基于文件对象构建 csv写入对象
csv_writer = csv.writer(f)
# 3. 构建列表头
csv_writer.writerow(["姓名","年龄","性别"])
# 4. 写入csv文件内容
csv_writer.writerow(["l",'18','男'])
csv_writer.writerow(["c",'20','男'])
csv_writer.writerow(["w",'22','女'])
# 5. 关闭文件
f.close()
# 6.读操作
with open('1.csv', newline='') as f:
data = csv.reader(f)
for row in data:
print(row)