1. 程式人生 > >Python學習:讀取csv檔案

Python學習:讀取csv檔案

CSV是Conma Sepatrate Values(逗號分隔值)的縮寫,文件的內容是由‘,’分隔的一列列資料構成的。CSV格式是電子表格和資料庫最常用的匯入和匯出格式。
CSV模組實現了以CSV格式讀取和寫入表格資料,它允許程式設計師以Excel首選格式寫入資料,或者從Excel生成的檔案中讀取資料。

Excel 與CSV文件

(1) Excel建立csv文件

Excel是我們經常用來製作表格和進行一些資料處理的工具,Excel也可以被用來建立csv檔案。
在Excel文件中編輯如下資料

在選擇儲存的時候檔案格式可以選擇csv格式,儲存完畢之後便生成了csv格式檔案。
這裡寫圖片描述


為了更好的理解逗號分隔值(csv)檔案,我們將剛剛儲存好的xxx.csv檔案以記事本(.txt)開啟我們可以看到如下結果
這裡寫圖片描述
原本表格中各個資料之間用’,’隔開了,這樣,我們便能很直觀的理解逗號分隔的意思了。

Python的CSV模組內容

  • csv.reader(csvfile, dialect=’excel’, **fmtparams)

    引數說明:
    csvfile: 要使用的物件csv檔案,csvfile是任何支援迭代器協議的物件,可以是檔案物件或者列表物件。如果csvfile是一個檔案物件,那麼它可以被 newline=” 開啟,並且其選擇開啟模式時需要加“b”標誌引數。”r”表示讀模式
    dialect:編碼風格,預設為excel的風格(使用‘,’分隔)。同時,其也支援自定義。給出的可選dialect引數被用於定義特定於CSV dialect的一組引數。它可以是dialect類子類的例項,也可以是list_dialects()函式返回的字串之一。
    fmtparam: 格式化引數,用來覆蓋之前dialect引數指定的編碼風格。


一個簡短的使用例子:
import csv

with open('test.csv',r) as csvfile:  
    reader = csv.reader(csvfile)
    for line in reader:
        print(line)
結果如下:

[‘No.’, ‘Color’, ‘Root’]
[‘1’, ‘1’, ‘1’]
[‘2’, ‘2’, ‘1’]
[‘3’, ‘2’, ‘1’]
[‘4’, ‘1’, ‘1’]

  • csv.writer(csvfile, dialect=’excel’, **fmtparams)

    與讀取檔案函式csv.reader()類似,向csv檔案中寫入資料。

csv.writerow() 向csv檔案中寫入一行資料
csv.writerows() 向csv檔案中寫入數行資料

一個簡短的使用例子:
import csv

name = ["No.","Color","Root"]
r1 = ["1","1","1"]
r2 = ["2","2","1"]
r3 = [["3","2","1"],["4","1","1"]]
with open('test.csv','w') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(name)
    writer.writerow(r1)
    writer.writerow(r2)
    writer.writerows(r3)
如果’test.csv’ 檔案事先存在,writer函式會首先清空原檔案中的資料, 再執行writerow()等。如果事先不存在,則writer()會首先建立一個空白的test.csv檔案。 執行結果如下圖所示: ![這裡寫圖片描述](https://img-blog.csdn.net/2018081418570661?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01hb19Kb25haA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 從執行結果上我們看到行之間都有空行,解決方案python2的話可以將”w”模式改成”wb” ,python3中在模式引數後面新增newline=”

with open(‘test.csv’,’w’,newline=”) as csvfile:

結果如下: ![這裡寫圖片描述](https://img-blog.csdn.net/20180814192524367?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01hb19Kb25haA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 從圖中我們, 可以看到空行已經全部消失。
  • 追加寫入
    在原有檔案的最後一行資料後面追加寫入新的資料。
import csv

r4 = ["5","3","1"]
with open('test.csv','a',newline='') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(r4)

執行結果如下所示:
這裡寫圖片描述
目前主要用到的是這些,其它的有需要再更。比如:writerheader(),dialect()等。


Reference:

[1] https://docs.python.org/3.5/library/csv.html#csv-fmt-params
[2] https://blog.csdn.net/u012162613/article/details/41915859
[3] https://blog.csdn.net/guoziqing506/article/details/52014506