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(),程式碼更簡潔直觀!
留言板
歡迎留下建議與分享!希望一起交流!感恩!