iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 15
1
Software Development

糊裡糊塗Python就上手系列 第 15

[2020鐵人賽Day15]糊裡糊塗Python就上手-CSV手到擒來

今日目標

學習如何使用Python操縱CSV的聽說讀寫!?
不對,是讀寫應用/images/emoticon/emoticon01.gif

What is CSV?

CSV(Comma Separated Values,簡稱 csv)是一種以逗點分隔值的資料格式並以純文字的方式儲存為檔案。
CSV檔案是純文字的檔案,編輯時可以直接使用文字編輯器,當然也可以使用Excel應用程式編輯。

實際體驗

讓我們建立一個「test.csv」,資料如附圖:(也可透過連結下載 連結在此)
https://ithelp.ithome.com.tw/upload/images/20200930/20091333nDXaYsuN6W.png

讀取 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)

https://ithelp.ithome.com.tw/upload/images/20200930/20091333jtOXwxQhnu.png

在上述開啟 CSV 檔案時加上了「newline=''」,這是為了讓資料中包含換行符號可以正確被讀出

有發現讀出的內容有BOM標頭的符號「\ufeff」嗎?
只要在open()方法內加上編碼「encoding='utf-8-sig'」即可消除
(對於接下來的實作很重要,沒做這項會卡住唷/images/emoticon/emoticon06.gif
(詳情可參考:https://stackoverflow.com/questions/17912307/u-ufeff-in-python-string )

open('test.csv', newline='', encoding='utf-8-sig')

讀取 CSV 檔案內容,並轉為 Dictionary 後印出內容

使用 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['體重'])

https://ithelp.ithome.com.tw/upload/images/20200930/200913338v5zVtb6Bd.png

新建立 CSV 寫入資料

開啟 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])

https://ithelp.ithome.com.tw/upload/images/20200930/20091333P3e1lP1Ebp.png

https://ithelp.ithome.com.tw/upload/images/20200930/20091333eoeJly3nME.png

https://ithelp.ithome.com.tw/upload/images/20200930/200913334tX519CaSv.png

有無發現,這邊用 Python 程式碼產出的編碼 utf-8 的 CSV 檔案,是沒有包含BOM標頭的,因此沒有顯示出「\ufeff」的符號

結論

在 CSV 方面的操作其實還挺常看到的,且在資料讀取的方面,也是挺有效率的(畢竟還是算純文字檔案)
在後續章節,將會提到 Excel 的操作,敬請拭目以待


上一篇
[2020鐵人賽Day14]糊裡糊塗Python就上手-文件I/O操作
下一篇
[2020鐵人賽Day16]糊裡糊塗Python就上手-Python Excel 操縱套餐(使用openpyxl)
系列文
糊裡糊塗Python就上手30

尚未有邦友留言

立即登入留言