學習如何使用Python操縱CSV的聽說讀寫!?
不對,是讀寫應用
CSV(Comma Separated Values,簡稱 csv)是一種以逗點分隔值的資料格式並以純文字的方式儲存為檔案。
CSV檔案是純文字的檔案,編輯時可以直接使用文字編輯器,當然也可以使用Excel應用程式編輯。
讓我們建立一個「test.csv」,資料如附圖:(也可透過連結下載 連結在此)
若是要讀取以上建立好的「test.csv」我們可以使用先前讀取文字檔案open()方法(test.csv 需要在同一層目錄)
首先需要先引入csv模組套件
接著用csv模組套件的reader()函式讀出資料
import csv
# 開啟 csv 檔案
with open('test.csv', newline='') as csvfile:
# 讀取 csv 檔案內容
rows = csv.reader(csvfile)
# 使用迴圈呈現內容
for row in rows:
print(row)
在上述開啟 CSV 檔案時加上了「newline=''」,這是為了讓資料中包含換行符號可以正確被讀出
有發現讀出的內容有BOM標頭的符號「\ufeff」嗎?
只要在open()方法內加上編碼「encoding='utf-8-sig'」即可消除
(對於接下來的實作很重要,沒做這項會卡住唷)
(詳情可參考:https://stackoverflow.com/questions/17912307/u-ufeff-in-python-string )
open('test.csv', newline='', encoding='utf-8-sig')
使用 csv.DictReader() 來讀取 CSV 檔案內容時,會自動將第一列當作欄位名稱,第二列之後的每一列轉為 dictionary
import csv
# 開啟 csv 檔案
with open('test.csv', newline='', encoding='utf-8-sig') as csvfile:
# 讀取 csv 檔案內容並轉為 Dictionary
rows = csv.DictReader(csvfile)
# 使用迴圈呈現內容
for row in rows:
print(row['姓名'], row['身高'], row['體重'])
開啟 CSV 並指定模式為「寫入」,若是檔案不存在則新建檔案,若是檔案存在則會覆蓋為新資料
import csv
# 開啟 csv 檔案
with open('test1.csv', 'w', newline='') as csvfile:
# 建立 csv 檔寫入物件
writer = csv.writer(csvfile)
# 寫入第一列(欄位)
writer.writerow(['姓名', '科目', '分數'])
# 寫入其餘列資料(內容)
writer.writerow(['婐欺巴', '電腦概論', 78])
writer.writerow(['擬白柒', '社會倫理', 87])
writer.writerow(['庶樹醮', '法務論學', 94])
有無發現,這邊用 Python 程式碼產出的編碼 utf-8 的 CSV 檔案,是沒有包含BOM標頭的,因此沒有顯示出「\ufeff」的符號
在 CSV 方面的操作其實還挺常看到的,且在資料讀取的方面,也是挺有效率的(畢竟還是算純文字檔案)
在後續章節,將會提到 Excel 的操作,敬請拭目以待