csv 库
csv(Comma-Separated Values, 逗号分割值)是存储表格数据的常用文件格式。
它每一行都用一个换行符分隔,列与列之间用逗号分隔。
本地文件
Python的csv库可以非常简单地修改csv文件,甚至从零开始创建一个csv文件。
比如:
import csv
csvFile = open("../files/test.csv",'w+')
try:
writer = csv.writer(csvFile)
writer.writerow(('number','number plus 2','number times 2'))
for i in range(10):
writer.writerow((i,i+2,i*2))
finally:
csvFile.close()
其中writerow()用来写入行。
网络文件
对于网络上的csv文件,我们可以直接把文件读成一个字符串,然后转换成一个StringIO对象,使它具有文件的属性。
比如说从网上获取Monty Python乐团的专辑列表,然后把每一行都打印到命令行里。
from urllib.request import urlopen
from io import StringIO
import csv
data = urlopen("http://pythonscraping.com/files/MontyPythonAlbums.csv").read().decode('ascii','ignore')
dataFile = StringIO(data)
csvReader = csv.reader(dataFile)
for row in csvReader:
print("The album \""+row[0]+"\" was released in "+str(row[1]))
输出结果是这样的
The album "Name" was released in Year
The album "Monty Python's Flying Circus" was released in 1970
The album "Another Monty Python Record" was released in 1971
...
所以可以发现这个csv.reader返回的csvReader对象是可迭代的,而且是一个Python的列表。
还有一个csv.DictReader函数,它返回的对象是一个Python的字典。
from urllib.request import urlopen
from io import StringIO
import csv
data = urlopen("http://pythonscraping.com/files/MontyPythonAlbums.csv").read().decode('ascii','ignore')
dataFile = StringIO(data)
csvReader = csv.DictReader(dataFile)
print(dictReader.fieldnames)
for row in dictReader:
print(row)
输出结果
['Name','Year']
{'Name':"Monty Python's Flying Circus",'Year':'1970'}
{'Name':"Another Monty Python Record",'Year':'1971'}
...
【参考】
[1]《Python网络数据采集》Ryan Mitchell