CSV (Comma Separated Values) 格式是电子表格和数据库中最常见的输入、输出文件格式。在 RFC 4180 规范推出的很多年前,CSV 格式就已经被开始使用了,由于当时并没有合理的标准,不同应用程序读写的数据会存在细微的差别。这种差别让处理多个来源的 CSV 文件变得困难。但尽管分隔符会变化,此类文件的大致格式是相似的,所以编写一个单独的模块以高效处理此类数据,将程序员从读写数据的繁琐细节中解放出来是有可能的。
csv
模块实现了 CSV 格式表单数据的读写。其提供了诸如“以兼容 Excel 的方式输出数据文件”或“读取 Excel 程序输出的数据文件”的功能,程序员无需知道 Excel 所采用 CSV 格式的细节。此模块同样可以用于定义其他应用程序可用的 CSV 格式或定义特定需求的 CSV 格式。
csv
模块中的reader
类和writer
类可用于读写序列化的数据。也可使用DictReader
类和DictWriter
类以字典的形式读写数据。
reader
- 原型
csv.reader(csvfile, dialect='excel', **fmtparams)
- 参数说明
- 如果 csvfile 是文件对象,则打开它时应使用
newline=''
。 1 - 可选参数 dialect 是用于不同的 CSV 变种的特定参数组。它可以是
Dialect
类的子类的实例,也可以是list_dialects()
函数返回的字符串之一。 - 可选关键字参数 fmtparams 可以覆写当前变种格式中的单个格式设置。有关变种和格式设置参数的完整详细信息,请参见 变种与格式参数 部分。
- 如果 csvfile 是文件对象,则打开它时应使用
- 返回值
返回一个Reader
对象,该对象将逐行遍历 csvfile。 - 范例
import csv
with open('eggs.csv', newline='') as csvfile:
spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
for row in spamreader:
print(', '.join(row))
csv 文件的每一行都读取为一个由字符串组成的列表。除非指定了 `QUOTE_NONNUMERIC` 格式选项(在这种情况下,未加引号的字段会转换为浮点数),否则不会执行自动数据类型转换。
writer
- 原型
csv.writer(csvfile, dialect="excel", **fmtparams)
- 参数说明
同 [[#^6bd61e]] - 返回值
返回一个writer
对象,该对象负责将用户的数据在给定的文件类对象上转换为带分隔符的字符串。 csvfile 可以是任何具有write()
方法的对象。 - 范例
import csv
with open('eggs.csv', 'w', newline='') as csvfile:
spamwriter = csv.writer(csvfile, delimiter=' ',
quotechar='|', quoting=csv.QUOTE_MINIMAL)
spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
为了尽量简化与实现 DB API 的模块之间的接口,[`None`](https://docs.python.org/zh-cn/3/library/constants.html#None "None") 值会被当作空字符串写入。 虽然这个转换是不可逆的,但它可以简化 SQL NULL 数据值到 CSV 文件的转储而无需预处理从 `cursor.fetch*` 调用返回的数据。 在被写入之前所有其他非字符串数据都会先用 [`str()`](https://docs.python.org/zh-cn/3/library/stdtypes.html#str "str") 来转转为字符串。
DictReader
- 原型
class DictReader(f, fieldnames=None, restkey=None, restval=None, dialect="excel", *args, **kwds)
- 参数列表 ^03733a
- 返回值
返回的行是dict
类型 - 范例
import csv
with open('names.csv', newline='') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
print(row['first_name'], row['last_name'])
DictWriter
- 原型
class DictWriter(f, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)
- 参数列表
同 [[#^03733a]] - 范例
import csv
with open('names.csv', 'w', newline='') as csvfile:
fieldnames = ['first_name', 'last_name']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'})
writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})