csv檔案儲存
CSV,全稱為Comma-Separated Values,中文可以叫作逗號分隔值或字元分隔值,其檔案以純文字形式儲存表格資料。該檔案是一個字元序列,可以由任意數目的記錄組成,記錄間以某種換行符分隔。每條記錄由欄位組成,欄位間的分隔符是其他字元或字串,最常見的是逗號或製表符。不過所有記錄都有完全相同的欄位序列,相當於一個結構化表的純文字形式。它比Excel檔案更加簡介,XLS文字是電子表格,它包含了文字、數值、公式和格式等內容,而CSV中不包含這些內容,就是特定字元分隔的純文字,結構簡單清晰。所以,有時候用CSV來儲存資料是比較方便的
本文用python程式碼實現CSV檔案的寫入和讀取方式。這也是一種常用的資料儲存方式,需要熟練掌握
1.寫入
首先,開啟data.csv檔案,然後指定開啟的模式為w(即寫入),獲得檔案控制代碼,隨後呼叫csv庫的writer()方法初始化寫入物件,傳入該控制代碼,然後呼叫writerow()方法傳入每行的資料即可完成寫入。
import csv with open('data.csv', 'w', newline='') as csvfile: writer = csv.writer(csvfile) writer.writerow(['id', 'name', 'age']) writer.writerow(['10001', 'Mike', 20]) writer.writerow(['10002', 'Bob', 22]) writer.writerow(['10003', 'Jordan', 21])
執行結束後,會生成一個名為data.csv的檔案,此時資料就成功寫入了。直接以文字形式開啟的話,其內容如下

01.png
可以看到,寫入的文字預設以逗號分隔,呼叫一次writerow()方法即可寫入一行資料。用Excel開啟的結果如下

02.png
一般情況下,爬蟲爬取的都是結構化資料,我們一般會用字典來表示。在csv庫中也提供了字典的寫入方式,示例如下:
import csv with open('data.csv', 'w') as csvfile: fieldnames = ['id', 'name', 'age'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() writer.writerow({'id': '10001', 'name': 'Mike', 'age': 20}) writer.writerow({'id': '10002', 'name': 'Bob', 'age': 22}) writer.writerow({'id': '10003', 'name': 'Jordan', 'age': 21})
這裡先定義3個欄位,用fieldnames表示,然後將其傳給DictWriter來初始化一個字典寫入物件,接著可以呼叫writeheader()方法先寫入頭資訊,然後再呼叫writerow()方法傳入相應字典即可。最終寫入的結果是完全相同的
另外,如果想追加寫入的話,可以修改檔案的開啟模式,即將open()函式的第二個引數改成a,程式碼如下:
import csv with open('data.csv', 'a') as csvfile: fieldnames = ['id', 'name', 'age'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writerow({'id': '10004', 'name': 'Durant', 'age': 22})
這樣在上面的基礎上再執行這段程式碼,新行會新增成功,如下:

03.png
如果要寫入中文內容的話,可能會遇到字元編碼的問題,此時需要給open()引數指定編碼格式。比如,這裡再寫入一行包含中文的資料,程式碼需要改寫如下:
import csv with open('data.csv', 'a', encoding='utf-8', newline='') as csvfile: fieldnames = ['id', 'name', 'age'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writerow({'id': '10005', 'name': '王偉', 'age': 22})
執行結果如下:

04.png
2.讀取
我們同使用csv庫來讀取CSV檔案。例如,將剛才寫入的檔案內容讀取出來,相關程式碼如下
import csv with open('data.csv','r', encoding='utf-8') as csvfile: # 呼叫csv模組的reader函式讀檔案 lines = csv.reader(csvfile) for line in lines: print(line)
執行結果如下:

05.png
另外,如果接觸過pandas的話,可以利用read_csv()方法將資料從CSV中讀取出來,例如
import pandasas pd df = pd.read_csv('data.csv') print(df)
執行結果如下:

06.png
在做資料分析的時候,csv儲存方法用得比較多,也是一種比較方便地讀取CSV檔案的方法。