python读写csv文件

文章目录

    • writer
    • reader
    • dialect
    • DictWriter和DictReader

更多Python标准库内容:刷完这50个标准库模块:没人比我更懂Python了

csv中最重要的两个函数分别是writerreader。考虑到很多人手头可能没有适合学习操作的csv文件,所以对csv模块的学习从writer开始。

writer

>>> import csv
>>> data = [[i*j for j in range(5)] for i in range(5)]
>>> f = open('test.csv','w')    #以写模式打开`test.csv`
>>> with f:             # with可以在程序段结束后自动close
...   w = csv.writer(f) 
...   for row in data:
...     w.writerow(row) #按行写入`row`

从而我们新建了一个csv文件,其内容如下。

0,0,0,0,0

0,1,2,3,4

0,2,4,6,8

0,3,6,9,12

0,4,8,12,16

delimiter参数用于更改列之间的分割符号,默认为,,若将w写为w=csv.writer(f,delimiter=' '),则得到的csv文件内容为

0 0 0 0 0

0 1 2 3 4

0 2 4 6 8

0 3 6 9 12

0 4 8 12 16

reader

readerwriter的逆过程,可以按行读取csv中的数据

>>> f = open('test.csv','r') #通过r模式打开刚刚创建的csv
>>> with f:
...   r = csv.reader(f) 
...   for row in r:
...     print(row)
...
['0', '0', '0', '0', '0']
[]
['0', '1', '2', '3', '4']
[]
['0', '2', '4', '6', '8']
[]
['0', '3', '6', '9', '12']
[]
['0', '4', '8', '12', '16']

writerreader中还有quoting参数,用以设置csv中识别引号的方式,其可选参数如下

适用于 加引号的字段
csv.QUOTE_ALL writer 所有字段
csv.QUOTE_MINIMAL writer 包含特殊字符的字段
csv.QUOTE_NONNUMERIC writer
reader
非数字字段
将无引号的字段转为float类型
csv.QUOTE_NONE writer
reader
不适用引号
不处理引号字符

dialect

csv是一种简单的文件格式,但仍然需要一些设置,比如分隔符以及处理引号的方式等。dialect便是对某些处理方式的集成,csv.reader中默认的dialectexcel,便相当于声明了使用,作为分隔符。

通过list_dialects可以获取当前已经定义的dialect

>>> csv.list_dialects()
['excel', 'excel-tab', 'unix']

这三种dialect分别对应三个已经封装好的类:excel, excel_tab, unix_dialect,其各项参数如下

成员变量 csv.excel csv.excel_tab csv.unix_dialect
delimiter , \t ,
doublequote True True True
escapechar None None None
lineterminator \r\n \r\n \r\n
quotechar " " "
quoting 0 0 1
skipinitialspace False False False

其中,doublequote为True表示默认双引号,否则为单引号;escapechar为None表示禁用转义;lineterminator表示行结尾;quotechar表示用于包含特殊字符的字符;skipinitialspace为False则不忽略分隔符之后的空格。

通过register_dialectunregister_dialect可以新建或者取消dialect,例如

>>>csv.register_dialect('test',delimiter='-',quoting=csv.QUOTE_NONE)

即创建了一个新的dialect,其分割符号为-,而引用模式采取QUOTE_NONE

DictWriter和DictReader

readerwriter主要用于按行读写数据,其操作的数据一般是list这种一维可迭代结构。相比之下,DictWriterDictReader可以更加方便地通过字典来操作数据。

例如

>>> dct = [{str(j):i*j for j in range(5)} for i in range(5)]
>>> for i in dct:
...   print(i)
...
{'0': 0, '1': 0, '2': 0, '3': 0, '4': 0}
{'0': 0, '1': 1, '2': 2, '3': 3, '4': 4}
{'0': 0, '1': 2, '2': 4, '3': 6, '4': 8}
{'0': 0, '1': 3, '2': 6, '3': 9, '4': 12}
{'0': 0, '1': 4, '2': 8, '3': 12, '4': 16}

则通过DictWriter可将dct写入csv中,以key为每一列的标题,以value为某行对应标题的值。

>>> with open('dict.csv', 'w', newline='') as csvfile:
...   titles = list(dct[0].keys())
...   w = csv.DictWriter(csvfile,fieldnames=titles)
...   for kw in dct:
...     w.writerow(kw)

dict.csv内容为

0,0,0,0,0
0,1,2,3,4
0,2,4,6,8
0,3,6,9,12
0,4,8,12,16

你可能感兴趣的:(#,Python标准库,python,后端,csv)