一、认识CSV
CSV:Comma-Separated Values 逗号分隔值
顾名思义,通常以逗号(也不一定是)分隔的,其文件以纯文本形式存储表格数据(数字和文本)。
泛指具有以下特征的任何文件:
- 纯文本,使用某个字符集,比如ASCII、Unicode、EBCDIC或GB2312;
- 由记录组成(典型的是每行一条记录);
- 每条记录被分隔符分隔为字段(典型分隔符有逗号、分号或制表符;有时分隔符可以包括可选的空格);
- 每条记录都有同样的字段序列。
其规则:
- 开头是不留空,以行为单位。
- 可含或不含列名,含列名则居文件第一行。
- 一行数据不跨行,无空行。
- 以半角逗号(即,)作分隔符,列为空也要表达其存在。
- 列内容如存在半角引号(即"),替换成半角双引号("")转义,即用半角引号(即"")将该字段值包含起来。
- 文件读写时引号,逗号操作规则互逆。
- 内码格式不限,可为 ASCII、Unicode 或者其他。
- 不支持数字
- 不支持特殊字符
CSV格式文件的优势:
- csv文件被许多种类的程序广泛支持
- 可以在文本编辑器中查看(包括IDLE文件编辑器)
- csv文件可以直接用Excel打开
- 同样的内容,csv文件比Excel文件小的得多
- csv格式适合保存海量数据。可以像txt一样以文本流的方式进行流式处理,不但能导出海量信息,而且流式处理占用内存极低,服务器对浏览器的响应也是非常迅速的
——
二、CSV模块之Reader对象
在Python中自带了CSV模块可以轻松容易地解析CSV文件。
通过创建Reader对象,我们可以实现从CSV文件读取数据操作。
import csv
exampleFile = open('example.csv') # 打开CSV文件
exampleReader = csv.reader(exampleFile) # 创建Reader对象
exampleData = list(exampleReader) # 创建数据的列表的列表
print(exampleData)
# 可以通过[row][col]来访问特定的行和列的值
print(exampleData[0][0])
print(exampleData[0][1])
print(exampleData[1][1])
print(exampleData[2][2])
其打印结果如下:
如果我们需要整整齐齐打印出CSV文件的所有数据,可以采用for循环的方式
import csv
exampleFile = open('example.csv') # 打开CSV文件
exampleReader = csv.reader(exampleFile) # 创建Reader对象
# 通过for循环来从Reader对象读取数据
for row in exampleReader:
print('Row #'+str(exampleReader.line_num)+' '+str(row)) # line_num 储存着Reader对象的行号
其打印结果如下:
——
三、CSV模块之Writer对象
如果我们要将数据写入CSV文件,那么就要使用csv.writer()函数来创建Writer对象。
import csv
outputFile = open('output.csv','w',newline='') # 创建CSV文件,注意如果没有newline='',则会有两倍行距
outputWriter = csv.writer(outputFile) # 创建Writer对象
# 以writerow 的方式写入数据
outputWriter.writerow(['spam','eggs','bacon','ham'])
outputWriter.writerow(['Hello, world!','eggs','bacon','ham'])
outputWriter.writerow([1, 2, 3.1415, 4])
outputFile.close()
生成的CSV文件,用Excel打开
如果在open()函数中没有参数 newline=’’,打开后会发现行与行之间会多个空行。
还有两个重要的参数要介绍下,delimiter(分隔符)和lineterminator(行终止符)。
如果用制表符代替逗号来分隔单元格,并希望有两倍行距
import csv
csvFile = open('example.tsv','w',newline='') # 文件扩展名tsv,表示制表符分隔的值
csvWriter = csv.writer(csvFile, delimiter='\t', lineterminator='\n\n') # 分隔符为制表符,行终止符为两倍换行符
csvWriter.writerow(['apples','oranges','grapes'])
csvWriter.writerow(['eggs','bacon','ham'])
csvWriter.writerow(['ham','ham','ham','ham','ham'])
csvFile.close()
最终我们打开记事本查看数据
——
四、复盘总结
今天学习了Python自带的CSV模块来实现对CSV文件的读写。
总结一下今日所学:
- CSV:Comma-Separated Values 逗号分隔值
- CSV文件的优势:被多程序支持,内存小,适合保存海量数据
- CSV文件的读取:
- 调用csv.reader()方法,创建Reader对象
- list()生成列表的列表,[row][col]定位访问
- 通过for循环逐行打印数据
- Reader.line_num保存的行编号
- CSV文件的写入:
- 调用csv.writer()方法,创建Writer对象
- open()时,要传入参数 newline=’’
- 调用writerow()方法写入数据
- delimiter关键字 指定分隔符
- lineterminator关键字 指定行终止符
注:本中的案例均来自《Python编程快速上手 让繁琐工作自动化》——[美] Al Sweigart 斯维加特