CSV文件是简化的电子表格,保存为纯文本文件。

CSV文件中的每行代表电子表格中的一行,都好分割了该行中的单元格。

CSV文件是简单的,缺少Excel电子表格的许多功能,但它是表示电子表格数据的直接方式。

CSV格式和它声称的完全一致:它就是一个文本文件,具有逗号分隔的值。

但并非CSV文件中的每个逗号,都表示两个单元格之间的分界。

因为split()方法不能处理CSV文件的转义字符,所以使用CSV模块读写CSV文件。


Reader对象

要用CSV模块从CSV文件中读取数据,需要创建一个Reader对象。

Reader对象迭代遍历CSV文件中的每一行。

CSV模块是python自带的,不需要安装,直接导入可用。

不能将文件名字字符串传递给csv.reader()函数。


样例:

blob.png

>>> import csv
>>> file1=open('file1.csv')
>>> file1Reader=csv.reader(file1)
>>> file1Data=list(file1Reader)
>>> file1Data
[['1', '张三', '男', '28'], ['2', '李四', '男', '19'], ['3', '王五', '男', '25'], ['4', '赵六', '男', '35'], ['5', '田七', '男', '54']]
>>> file1Data[2][1]
'王五'
>>>


要取得行号,就使用Reader对象的line_num变量,它包含了当前行的编号。

Reader对象只能循环遍历一次。要再次读取CSV文件,必须调用csv.reader,创建一个对象。

>>> import csv
>>> file1=open('file1.csv')
>>> file1Reader=csv.reader(file1)
>>> for row in file1Reader:
...     print('Row #'+str(file1Reader.line_num)+' '+str(row))
...
Row #1 ['1', '张三', '男', '28']
Row #2 ['2', '李四', '男', '19']
Row #3 ['3', '王五', '男', '25']
Row #4 ['4', '赵六', '男', '35']
Row #5 ['5', '田七', '男', '54']
>>> for row in file1Reader:
...     print('Row #'+str(file1Reader.line_num)+' '+str(row))
...
>>>


Writer对象

Writer对象将数据写入CSV文件。要创建一个Writer对象,就使用csv.writer()函数。

在windows上,需要为open()函数的newline关键字参数传入一个空字符串。

如果忘记设置newline关键字参数,CSV文件中的行距将有两倍。

在CSV文件中使用双引号,防止逗号被自动转义。


样例:

>>> import csv
>>> file1=open('file1.csv','w',newline='')
>>> file1Writer=csv.writer(file1)
>>> file1Writer.writerow(['1','Tom','male','22'])
15
>>> file1Writer.writerow(['2','Jack','male','29'])
16
>>> file1Writer.writerow(['3','Linda','female','37'])
19
>>> file1.close()

blob.png