以CSV格式导出数据,但设置不同的列.可以通过图书馆吗?



数据输入:

[
{'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模块无法覆盖这种输入。

是否有一些用于单方法导出的包或库?或者一个好的解决方案来处理列的差异?

使用附带的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,

直接使用熊猫:

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,

你必须传递一个restval参数给dicwriter这是字典中缺少键的默认参数

writer = Dictwriter(file, list('abcde'), restval='')

相关内容

  • 没有找到相关文章

最新更新