在 Python 中將字典寫入 CSV

Rayven Esplanada 2021年7月20日
在 Python 中將字典寫入 CSV

本教程將介紹如何在 Python 中將一個字典變數寫入 csv 檔案。

在 Python 中使用 csv 模組將一個字典寫入 CSV 檔案

Python 模組 csv 包含了操作 csv 檔案的工具和函式。有兩種簡單的方法可以用來將字典寫入 csv 檔案。writer()DictWriter()

這兩個方法的功能類似,唯一不同的是 DictWriter() 是一個包含更多功能的封裝類。

讓我們用一個帶有幾個鍵-值對的字典設定一個初始示例:

dct = {"Name": "John", "Age": "23", "Country": "USA"}

在第一個例子中,我們使用 writer() 來訪問一個新的 csv 檔案並將字典插入其中。

import csv

dct = {"Name": "John", "Age": "23", "Country": "USA"}

with open("dct.csv", "w") as f:
    writer = csv.writer(f)
    for k, v in dct.items():
        writer.writerow([k, v])

由於檔案訪問型別是 w,csv 檔案 dct.csv 的內容將被新的更改覆蓋。如果該檔案不存在,那麼它將在同一目錄下自動建立。

csv 檔案的內容將輸出:

CSV 檔案

由於只有一個字典條目,csv 檔案的佈局在第一列中包含了所有的鍵,而值在第二列中。

使用字典陣列的例子

這是一個單一字典的例子。如果你想在一個 csv 檔案中插入多個字典怎麼辦?

在這個例子中,將使用函式 DictWriter() 來寫入 csv 檔案。第一個例子的 CSV 佈局也需要改變,因為有多個相同鍵的值。

第一行應該包含鍵標籤,隨後的幾行將包含每個字典條目的值。

首先,宣告一個具有相同鍵值的字典陣列。

dct_arr = [
    {"Name": "John", "Age": "23", "Country": "USA"},
    {"Name": "Jose", "Age": "44", "Country": "Spain"},
    {"Name": "Anne", "Age": "29", "Country": "UK"},
    {"Name": "Lee", "Age": "35", "Country": "Japan"},
]

現在使用 csv 模組和 DictWriter() 將這個字典陣列寫入 csv 檔案。

import csv

labels = ["Name", "Age", "Country"]
dct_arr = [
    {"Name": "John", "Age": "23", "Country": "USA"},
    {"Name": "Jose", "Age": "44", "Country": "Spain"},
    {"Name": "Anne", "Age": "29", "Country": "UK"},
    {"Name": "Lee", "Age": "35", "Country": "Japan"},
]

try:
    with open("csv_dct.csv", "w") as f:
        writer = csv.DictWriter(f, fieldnames=labels)
        writer.writeheader()
        for elem in dct_arr:
            writer.writerow(elem)
except IOError:
    print("I/O error")

DictWriter() 中的引數 fieldnames 分配給變數 labels,它是一個字典陣列的鍵標籤陣列。

練習用異常處理(try ... except)來包裝操作檔案的程式碼也是不錯的。這是為了防止外部錯誤或關於檔案寫入過程的不相容。

輸出:

CSV 檔案陣列

總而言之,csv 模組包含了所有必要的功能和工具,以將字典寫入 csv 檔案。使用函式 writer()DictWriter() 都可以很容易地實現這個功能。

另外要注意的是,要把操作檔案的塊用異常處理包起來,以確保在它破壞東西之前就能捕獲到 IO 錯誤。

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

相關文章 - Python CSV

相關文章 - Python Dictionary