Python – 內建 CSV 模組 & Read , Write 方法

Loading

測試環境為 CentOS8 (虛擬機)

這邊看一下 Python 內建的 CSV 模組,參考範例 – https://shengyu7697.github.io/python-write-csv-file/

Writer

先來看一下 Writer 的方法.

  1. csvwriter.writerow(row)
    單筆資料的寫入,列(row)須為 list 格式 如: [‘A’ , ‘B’ , ‘C’] .

    import csv
    
    with open('output_data.csv', 'w', newline='') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerow(['No', 'Name', 'Score'])
        writer.writerow([1, 'Tom', 87.3])
        writer.writerow([2, 'Mary', 76.4])
        writer.writerow([3, 'Mark', 65.5])
    

    output_data.csv 檔案內容.

    No,Name,Score
    1,Tom,87.3
    2,Mary,76.4
    3,Mark,65.5
    

    下面來說明一下程式碼.

    匯入 csv 套件功能.

    import csv
    

    使用 with 語法時,可以免除自行編寫 try 與 finially, 詳細請參考 – https://benjr.tw/104769
    使用 File 物件 & Open 函式模式為 w – Write 寫入模式(當檔案不存在時新增檔案,檔案存在時覆寫原檔案),詳細請參考 – https://benjr.tw/104316

    with open('output_data.csv' , 'w', newline='') as csvfile:
    

    使用 csv 模組的 writer functions 回傳值為 writer 物件,輸入值可以為任何有 write() method 的物件 (這邊的 csvfile 為 file 物件).

        writer = csv.writer(csvfile)
    

    使用剛剛產生的 writer 物件透過 writerow(row) 將單筆資料寫入到檔案,其列(row) 格式可為 list 如: [‘A’ , ‘B’ , ‘C’].

        writer.writerow(['No', 'Name', 'Score'])
        writer.writerow([1, 'Tom', 87.3])
        writer.writerow([2, 'Mary', 76.4])
        writer.writerow([3, 'Mark', 65.5])
    
  2. csvwriter.writerows(rows)
    多筆資料的寫入,其 rows 須為可以迭代物件(如 List 物件).

    import csv
    
    my2dlist = [
        ['No', 'Name', 'Score'],
        [4, 'Tom', 87.3],
        [5, 'Mary', 76.4],
        [6, 'Mark', 65.5]
        ]
    
    path = 'output_data.csv'
    with open(path, 'w', newline='') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerows(my2dlist)
    

    output_data.csv 檔案內容.

    No,Name,Score
    4,Tom,87.3
    5,Mary,76.4
    6,Mark,65.5
    

    跟前面程式碼不同的是使用了 writerows 方法,這方法可以一次寫入多筆資料,其 rows 須為可以迭代物件 (如 my2dlist 為 List 物件).

        writer.writerows(my2dlist)
    

    除以上格式外,試過從 SQLite SELECT 得到的資料格式也可以.

    my2dlist = [
        ('No', 'Name', 'Score'),
        (7, 'Tom', 87.3),
        (8, 'Mary', 76.4),
        (9, 'Mark', 65.5)
        ]
    
  3. DictWriter.writeheader
    當資料格式為 dict ( dictionary ) 資料型態物件,資料是由 key (鍵值) + Value (值) 組成.

    import csv
    
    mydict1 = {'No':10, 'Name':'Tom', 'Score':87.3}
    mydict2 = {'No':11, 'Score':76.4, 'Name':'Mary'}
    mydict3 = {'Name':'Mark', 'Score':65.5, 'No':12}
    
    with open('output_data.csv' , 'w', newline='') as csvfile:
        writer = csv.writer(csvfile)
        headers = ['No', 'Name', 'Score']
        writer = csv.DictWriter(csvfile, fieldnames=headers)
        writer.writeheader()
        writer.writerow(mydict1)
        writer.writerow(mydict2)
        writer.writerow(mydict3)
    

    output_data.csv 檔案內容.

    No,Name,Score
    10,Tom,87.3
    11,Mary,76.4
    12,Mark,65.5
    

    下面來說明:
    資料是由 key (鍵值) + Value (值) 組成所以不用照順序.

    mydict1 = {'No':10, 'Name':'Tom', 'Score':87.3}
    mydict2 = {'No':11, 'Score':76.4, 'Name':'Mary'}
    mydict3 = {'Name':'Mark', 'Score':65.5, 'No':12}
    

    跟前面程式碼不同的是使用了 header ,因資料格式為 dict 需搭配 csv.DictWriter 方法來指定.

        headers = ['No', 'Name', 'Score']
        writer = csv.DictWriter(csvfile, fieldnames=headers)
    

    這邊還需多一步驟是把 Header 資料寫入.

        writer.writeheader()
    

    如資料格式為 List 的 dict 一樣直接透過 writerows 方法多筆寫入.

    import csv
    
    mylist = [
        {'No':13, 'Name':'Tom', 'Score':87.3}, # dict
        {'No':14, 'Name':'Mary', 'Score':76.4}, # dict
        {'No':15, 'Name':'Mark', 'Score':65.5} # dict
        ]
    
    with open('output_data.csv' , 'w', newline='') as csvfile:
        writer = csv.writer(csvfile)
        headers = ['No', 'Name', 'Score']
        writer = csv.DictWriter(csvfile, fieldnames=headers)
        writer.writeheader()
        writer.writerows(mylist)
    

    output_data.csv 檔案內容.

    No,Name,Score
    13,Tom,87.3
    14,Mary,76.4
    15,Mark,65.5
    

Reader

csv 一樣可以讀取檔案,下面看一個 Reader 方法的簡單範例.

import csv
with open('output_data.csv', newline='') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

執行結果

['No', 'Name', 'Score']
['13', 'Tom', '87.3']
['14', 'Mary', '76.4']
['15', 'Mark', '65.5']
沒有解決問題,試試搜尋本站其他內容

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料