CSV

CSV (Comma-Separated Values) 是一种通用的、相对简单的文件格式,经常用于表格数据和数据库数据的导入导出。特点:1.以行为单位, 2.每行表示一条记录, 3.以英文逗号分割每列数据(如果数据为空,逗号也要保留), 4.列名通常放置在文件第一行

我们在 python 中常用的读写 csv 文件的方法有标准库 csv 模块中的 csv.reader、csv.writer、csv.DictReader、csv.DictWriter 方法, 以及 pandas 库中的 pd.read_csv、pandas.DataFrame.to_csv 等方法。这里我们主要介绍 csv 模块 的使用。

csv.reader

csv.reader() 创建得到一个 csv.reader 对象,遍历对象,将会把每行记录分别作为一个 list 返回。或者,我们也可以直接使用 list(csv_reader_obj) 得到全部数据组成的一个二维的 list。

csv.reader(csvfile, dialect='excel', **fmtparams)
import csv
f = open(filepath, mode='r', encoding='utf-8', newline='')
csv_reader_obj = csv.reader(f)
for i in csv_reader_obj:
    print(i)

csv.writer

csv.writer() 创建一个 csv.writer 对象,用于将数据写入至文件中。

csv.writer(csvfile, dialect='excel', **fmtparams)
import csv
f = open('a.csv', 'w', encoding='utf-8', newline='')
writer = csv.writer(f)
writer.writerow(list_1)

csv.writerow(list) 将一个 list 写入文件的一行中。

csv.DictReader

csv.DictReader 创建读取数据的对象,将每行中的信息映射到一个有序字典 OrderedDict ,其 key 由可选 fieldnames 参数指定,其 value 由每一行的数据填充。

csv.DictReader (f, fieldnames=None, restkey=None, restval=None, dialect="excel", *args, **kwds)

参数:
fieldnames:可选,是一个序列,用于指定字典的 key。如果省略了字段名,则文件 f 第一行中的值将用作字段名。不管如何确定字段名称,有序词典都会保留其原始顺序。
restkey:可选,用于某些行的长度超出了 key 的长度时,使用 restkey 作为其 key 将多余数据作为 value。
restval:可选,用于对于数据缺失时的默认值(如,某一行长度少于 key 长度时填充)。

遍历 csv.DictReader 对象将会得到一个个的 dict,每一个 dict 的 value 是一行数据记录。

csv.DictWriter

csv.DictWriter 创建一个写入 csv 文件的对象,将字典 dict 拆解成行写入到文件。

csv.DictWriter(f, fieldnames, restval="", extrasaction="raise", dialect="excel", *args, **kwds)

参数:
fieldnames:必须,用于指定字典的 key。
restval:可选,用于填充缺失的数据,默认为空字符串 “”。
extrasaction:可选 “raise”, “ignore”。默认为 “raise” 表示当要写入的 dict 的 key 在 fieldnames 中不存在时,报错 ValueError,如果为 “ignore” 则表示会忽略这些键值对。

writer.writeheader() 将 fieldnames 作为一行写入 csv 文件中。
writer.writerow() 接收一个 dict,将 dict 中的 value 取出来来组成一个 list,作为一行写入 csv 文件中。

参考:
The most (time) efficient ways to import CSV data in Python https://docs.python.org/3/library/csv.html#module-csv