利用Python讀取CSV檔案資料
這篇主要針對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開啟會比較清楚。
3. 寫入檔案(Write File)
最主要的重點是我們使用csvwriter.writerow(xxx)把資料寫入到檔案中。其餘的部分和上面讀檔的內容差不多。
主要的說明直接放到程式碼上了,還請各位參考看看。
輸出結果
以上為這次的介紹,希望有幫助到各位讀者,程式最好的學習方式,就是馬上動作操演看看,一起在精進程式的路上加油吧!!