資料輸入:
[
{'a': 1, 'b': 2, 'c': 3},
{'b': 2, 'd': 4, 'e': 5, 'a': 1},
{'b': 2, 'd': 4, 'a': 1}
]
CVS 輸出(列順序無關緊要):
a, b, c, d, e
1, 2, 3
1, 2, , 4, 5
1, 2, , 4
標準庫csv模塊無法覆寫這種輸入。
是否有用于單方法匯出的包或庫?還是處理列差異的好方法?
uj5u.com熱心網友回復:
使用包含的csv模塊可以很容易地完成,只需進行一些初步處理。
import csv
data = [
{'a': 1, 'b': 2, 'c': 3},
{'b': 2, 'd': 4, 'e': 5, 'a': 1},
{'b': 2, 'd': 4, 'a': 1}
]
fields = sorted(set.union(*(set(tuple(d.keys())) for d in data))) # Determine columns.
with open('output.csv', 'w', newline='') as file:
writer = csv.DictWriter(file, fieldnames=fields)
writer.writeheader()
writer.writerows(data)
print('-fini-')
生成的檔案內容:
a,b,c,d,e
1,2,3,,
1,2,,4,5
1,2,,4,
uj5u.com熱心網友回復:
直接與熊貓:
import pandas as pd
lst = [
{'a': 1, 'b': 2, 'c': 3},
{'b': 2, 'd': 4, 'e': 5, 'a': 1},
{'b': 2, 'd': 4, 'a': 1}
]
df = pd.DataFrame(lst)
print(df.to_csv(index=None))
輸出:
a,b,c,d,e
1,2,3.0,,
1,2,,4.0,5.0
1,2,,4.0,
uj5u.com熱心網友回復:
您必須將 restval 引數傳遞給 Dictwriter,這是字典中缺少鍵的默認引數
writer = Dictwriter(file, list('abcde'), restval='')
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/342617.html
上一篇:讀取超大檔案R的列名和列值
