在 Python 中將字典寫入 CSV

在 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 錯誤。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
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