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

posted @ 2018-12-08 09:24  Yingjing  阅读(1259)  评论(0编辑  收藏  举报