CSV文件存儲
CSV,全稱為Comma-Separated Values,中文可以叫做逗號分隔值或字符分隔值,其文件以純文本形式存儲表格數據。該文件是一個字符序列,可以由任意數目的記錄組成,記錄間以某種換行符分隔。每條記錄由字段組成,字段間的分隔符是其他字符或字符串,最常見的是逗號或者制表符。不過所有記錄都有完全相同的字段序列,相當于一個結構化表的純文本形式。它比Excel文件更為簡潔,XLS文本是電子表格,它包含了文本、數值、公式和數據等內容,而CSV中不包含這些內容,就是特定字符分隔的純文本,結構簡單清晰。所以,有時候用CSV來保存數據是比較方便的。本節中,我們來講解Python讀取和寫入CSV文件的過程。
寫入這里首先來看一個最簡單的例子:
首先,打開data.csv文件,然后指定打開的模式為w(即寫入),獲得文件句柄,隨后調用csv庫的writer( )方法初始化寫入對象,傳入該句柄,然后再調用writerow( )方法傳入每行的數據即可完成寫入。
運行結束之后,會生成一個名為data.csv的文件,此時數據就成功寫入了。直接以文本形式打開的話,其內容如下:
可以看到,寫入的文本默認以逗號分隔,調用一次writerow( )方法即可寫入一行數據。用Excel打開的結果如下所示:
如果想要修改列與列之間的分隔符,可以傳入delimiter參數,其代碼如下:
這里在初始化寫入對象時傳入delimiter為空格,此時輸出結果的每一列就是以空格分隔了,內容如下:
另外,我們也可以調用writerows( )方法同時寫入多行,此時參數就需要為二維列表,例如:
輸出效果是相同的,內容如下:
但是一般情況下,爬蟲爬取的都是結構化的數據,我們一般會用字典來表示。在csv庫中也提供了字典的寫入方式,示例如下:
這里先定義3個字段,用fieldnames表示,然后將其傳給DictWriter來初始化一個字典寫入對象,接著可以調用writeheader( )方法先寫入頭信息,然后再調用writerow( )方法傳入相應的字典即可。最終寫入的結果是完全相同的,內容如下:
這樣就可以完成字典到CSV文件的寫入了。
另外,如果想追加寫入的話,可以修改文件的打開模式,即將open( )函數的第二個參數改為a,代碼如下:
這樣在上面的基礎上再執行這段代碼,文件內容便會變成:
如果要寫入中文內容的話,可能會遇到字符編碼的問題,此時需要給open( )參數指定編碼格式。比如,這里寫入一行包含中文的數據,代碼需要改寫如下:
這里需要給open( )函數指定編碼,否則可能會發生編碼錯誤。
另外,如果接觸過pandas等庫的話,可以調用DataFrame對象的to_csv( )方法來將數據寫入CSV文件中。
讀取
我們同樣可以使用csv庫來讀取CSV文件。例如,將剛才寫入的文件內容讀取出來。相關代碼如下:
運行結果如下:
這里我們構造的是Reader對象,通過遍歷輸出了每行的內容,每一行都是一個列表形式。注意,如果CSV文件中包含中文的話,還需要指定文件編碼。