利用Python讀取CSV檔案資料

Sharon Peng
Mar 4, 2021

--

這篇主要針對CSV檔案做讀取(Read)與寫入(Write)的介紹,也會介紹一些基本的概念。

如果是剛接觸程式不久的新手,聽到讀取檔案資料應該會很困惑吧,什麼叫做讀檔或是寫檔?(筆者我一開始沒接觸前也不知道會讀寫檔可以幹嘛?後來在實際應用過,才發現是個很好用的工具。

所以這篇就讓我介紹一下這項好用的工具吧!!

什麼是讀寫檔?

我們可以想得簡單一點,今天打開Word,然後直接在上面寫文字並存檔。其實即是「寫檔案(Write)」的動作。

讀檔(Read):跟字面上的意思一樣,只能「讀取」檔案,不能對檔案做修改。可以想看看,有時開啟一些Word檔時,一開始可能會在上方顯示「受保護檢視」,如下圖,這代表說這份文件我們只能看(讀取),不能做任何更動。如果要更改的話,只要按下啟用編輯即可(這又回到剛剛所說的「寫檔案」的動作)

那可能有些人又會有個疑問,平常我在寫程式,或者是練題目的時候,幾乎都是用num = scanf(…)或是num = input(),等待系統自動輸入,或是自己做輸入,根本不需要讀檔啊。

沒錯!在少量的資料中,我們是可以直接動手輸入。

但是當我們資料量很大,或是在要做資料的分析時,想必會想把結果做得漂亮,將資料整理到文件上,不太可能會先把資料一個一個輸入到程式中,再從cmd或是terminal上把資料複製下來在做整理吧。

所以如果可以善加利用讀寫檔的話,對於上述工作是非常有效率的。

下方例子方便讀者想像:

小澤是個成績優異個性又好的學生,這學期修了一門課,程式語言,教授說期末要4個人一組做專題。有很多人想要跟小澤同一組。小澤突發奇想,決定來寫個程式評估誰比較適合做他的組員!

小澤寫了一個組員評分系統,評分項目有做事效率、個性、融洽程度、成績等等,皆為可以量化的項目。

後來小澤收集到有50筆資料,他不太可能一個一個將資料輸入到程式中,等待結果後再一個一個貼到excel上。

聰明的小澤決定將這些量化後的資料放到csv檔,並透過python讀入,經過加權計算後,再輸出到新的檔案上。

希望透過上述的舉例,大家可以暸解讀檔的方便性。

接下來,進入我們這次的主題:

CSV小簡介:

CSV全名為,Comma-Separated Values,字面上直接翻為「逗號分割值」,其實是主要以「逗號」作為資料間做區隔的意思,雖然這樣說,但還是可以用其他的符號做分割。如果還是不太懂的話,請參考下方的舉例。

沒有分割的資料如下:
Howareyou.Todayisagoodday.
用「空格」做分割:
How are you. Today is a good day.
用「逗號」做分割:
How,are,you,Today,is,a,good,

程式讀寫檔案會有以下動作:

1. 開啟檔案(Open),關閉檔案(Close)

2. 讀取(Read)或寫入(Write) 檔案

1. 開啟檔案(Open File)、關閉檔案(Close File)

先簡單介紹一下純文字檔(.txt)檔案怎麼開啟。

使用上述方法開啟檔案,會需要多加一行程式碼把檔案關閉。

關閉檔案( file.close() )為了避免檔案會佔用系統資源,而且系統同一個時間能開啟的檔案也有限制,所以用這個方法的話需要養成關檔案的好習慣!

當然,如果覺得需要再多加一行很麻煩的話,建議使用下面的方法。

with open,使用這個的話,程式會自動幫我們呼叫close(),就不用自己再多打一行了。

with open(檔案名稱, '開啟模式') as fin:  # fin代表想要在程式內使用的名稱

開啟模式,這邊只先介紹簡單的「讀(read) → ‘r’」,「 寫(write) → ‘w’」。還有其他模式,之後要使用的話可以再去查詢。

2. 讀取檔案(Read File)

先建立一個reader物件,再將這個物件轉成串列(list)物件,之後就可以利用它來處理物件了,和一般使用list的形式一樣。

輸出結果:

另外程式碼中提到,delimiter=',',其中「分割符號」代表,資料之間要用什麼做分開,
我們例子上面使用「逗號」,如圖1。
如果我們改成delimiter = '\t',每個資料間用一個「tab鍵」做分割。如圖2。*需要注意的是,'\t' 在excel上開啟的時候,資料會擠在一起,最好使用記事本或sublime開啟會比較清楚。
圖一:delimiter=’,’
圖二,使用 delimiter = ‘\t’

3. 寫入檔案(Write File)

最主要的重點是我們使用csvwriter.writerow(xxx)把資料寫入到檔案中。其餘的部分和上面讀檔的內容差不多。

主要的說明直接放到程式碼上了,還請各位參考看看。

輸出結果

以上為這次的介紹,希望有幫助到各位讀者,程式最好的學習方式,就是馬上動作操演看看,一起在精進程式的路上加油吧!!

--

--

Sharon Peng
Sharon Peng

No responses yet