25. 讀寫csv數據

例如,我們編寫爬蟲從豆瓣網爬取了一些書籍的信息,以csv數據格式存儲:

書名, 作者, 出版社, 價格
精通scrapy網絡爬蟲, 劉碩, 清華大學出版社, 46.00
算法導論, Charles E.Leiserson, 人民郵電出版社, 85.00
Python灰帽子, Justin Seitz, 電子工業出版社, 39.00
...

要求:請將書價格高於80.00的書記錄存儲到另一csv文件中。

解決方案:

標準庫中的csv模塊,使用其中reader和writer完成csv文件讀寫。


  • 對於csv.reader()
csv_reader = reader(iterable [, dialect='excel']
                            [optional keyword args])

傳入一個文件對象,返回一個迭代器,迭代器的每個迭代讀取CSV文件(它可以跨多個輸入行)的一行內容。

>>> import csv

>>> rf = open('books.csv')

>>> reader = csv.reader(rf, delimiter=',')

>>> next(reader)
['書名,作者,出版社,價格']

>>> next(reader)
['精通scrapy網絡爬蟲,劉碩,清華大學出版社,46.00']

delimiter參數指定分隔符,csv默認分隔符是,,爲,時可省略。通過next()方法每次迭代一行

  • 對於csv.writer()
csv_writer = csv.writer(fileobj [, dialect='excel']
                                [optional keyword args])

傳入一個文件對象,返回一個迭代器,迭代器的每個迭代寫入一行內容到CSV文件中。

>>> wf = open('demo.csv', 'w')

>>> writer = csv.writer(wf, delimiter=' ')              #指定分隔符爲空格

>>> writer.writerow([1, 2, 3])
7

>>> writer.writerow(['x', 'y', 'z'])
7

>>> writer.writerow([7, 8, 9])
7

>>> wf.flush()
# cat demo.csv 
1 2 3
x y z
7 8 9

  • 方案示例:

books.csv:

書名,作者,出版社,價格 
精通scrapy網絡爬蟲,劉碩,清華大學出版社,46.00
算法導論,Charles E.Leiserson,人民郵電出版社,85.00
Python灰帽子,Justin Seitz,電子工業出版社,39.00
精通scrapy網絡爬蟲1,劉碩,清華大學出版社,46.00
算法導論1,Charles E.Leiserson,人民郵電出版社,85.00
Python灰帽子1,Justin Seitz,電子工業出版社,39.00
精通scrapy網絡爬蟲2,劉碩,清華大學出版社,46.00
算法導論2,Charles E.Leiserson,人民郵電出版社,85.00
Python灰帽子2,Justin Seitz,電子工業出版社,39.00
精通scrapy網絡爬蟲3,劉碩,清華大學出版社,46.00
算法導論3,Charles E.Leiserson,人民郵電出版社,85.00
Python灰帽子3,Justin Seitz,電子工業出版社,39.00
import csv

with open('books.csv') as rf:
    reader = csv.reader(rf)
    headers = next(reader)
    with open('books_out.csv', 'w') as wf:
        writer = csv.writer(wf)
        writer.writerow(headers)

        for book in reader:
            price = book[-1]
            if price and float(price) >= 80.00:
                writer.writerow(book)

books_out.csv:

書名,作者,出版社,價格 
算法導論,Charles E.Leiserson,人民郵電出版社,85.00
算法導論1,Charles E.Leiserson,人民郵電出版社,85.00
算法導論2,Charles E.Leiserson,人民郵電出版社,85.00
算法導論3,Charles E.Leiserson,人民郵電出版社,85.00

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章