python 如何寫入一個 CSV 的header 與一個 dict 一致,但是前面要加上檔案名稱

 




你可以使用 Python 的 csv 模組來寫入 CSV,並確保 header 包含檔案名稱。這裡有兩種方法可以實現:

方法 1:使用 writerow

import csv

filename = "data.csv"
data = {"name": "Alice", "age": 25, "city": "Taipei"}

# 構造 Header,在原始 key 前面加上檔案名稱
header = [filename] + list(data.keys())

with open(filename, "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    
    # 寫入 Header
    writer.writerow(header)
    
    # 寫入資料(值前面也可加上檔案名稱)
    writer.writerow([filename] + list(data.values()))

方法 2:使用 DictWriter

import csv

filename = "data.csv"
data = {"name": "Alice", "age": 25, "city": "Taipei"}

# 構造 Header
header = ["filename"] + list(data.keys())

with open(filename, "w", newline="", encoding="utf-8") as f:
    writer = csv.DictWriter(f, fieldnames=header)
    
    # 寫入 Header
    writer.writeheader()
    
    # 寫入資料(需添加 filename)
    row = {"filename": filename, **data}
    writer.writerow(row)

這兩種方式都會在 CSV 中寫入:

data.csv,name,age,city
data.csv,Alice,25,Taipei


根據你的需求選擇適合的方式!



是不是有一種方法可以直接把 data.keys() 展開? 而不需要用 + list



是的,你可以使用「 (*)」來展開 data.keys(),這樣可以避免 + list(data.keys()) 的寫法,使程式碼更簡潔。

改進版寫法
方法 1:使用 writerow

import csv

filename = "data.csv"
data = {"name": "Alice", "age": 25, "city": "Taipei"}

with open(filename, "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    
    # 使用 `*` 解包 keys,將 filename 插入第一個位置
    writer.writerow([filename, *data.keys()])
    
    # 使用 `*` 解包 values,將 filename 插入第一個位置
    writer.writerow([filename, *data.values()])

方法 2:使用 DictWriter

import csv

filename = "data.csv"
data = {"name": "Alice", "age": 25, "city": "Taipei"}

with open(filename, "w", newline="", encoding="utf-8") as f:
    writer = csv.DictWriter(f, fieldnames=["filename", *data.keys()])
    
    writer.writeheader()
    
    writer.writerow({"filename": filename, **data})

這樣就不需要手動轉換成 list,直接展開 keys() 或 values(),程式碼更簡潔直觀!