当事先不知道字段时使用 DictWriter 写入 CSV

2024-01-10

我正在将一大段文本解析为字典,最终目标是创建一个 CSV 文件,其中键作为列标题。

csv.DictWriter(csvfile, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)

问题的出现是因为任何第 n 行的字典都可以包含一个新的、以前从未使用过的密钥。然后我希望 CSV 也包含这个新密钥的列。简而言之,我的所有字段事先都不知道,所以我无法编译完整的fieldnames一开始。

有推荐的方法吗csv.DictWriter http://docs.python.org/2/library/csv.html?highlight=dictwriter#csv.DictWriter不忽略缺失的字段,而是将它们添加到fieldnames反而?只是改变fieldnames此时,前面的行的字段数会错误地减少。


而不是使用词典编写器这在你的情况下可能会令人困惑,因为我尝试使用字典没有排序writerow的方法csv。 这是我所做的:

"""
a) First took all the keys of dictionary and sorted it, which is not necessary.
b) Created a result list which appends value related the headers which is key of our input dict and if key is not available then .get() will return None. 
   So result list will contain lists for rows data.
c) Wrote header and each row from result list in csv file
"""

data_dict = [{ "Header_1":"data_1", "Header_2":"data_2", "Header_3":"data_3"},
             { "Header_1":"data_4", "Header_2":"data_5", "Header_3":"data_6"},
             { "Header_1":"data_7", "Header_2":"data_8", "Header_3":"data_9", "Header_4":"data_10"},
             { "Header_1":"data_11", "Header_3":"data_12"},
             { "Header_1":"data_13", "Header_2":"data_14", "Header_3":"data_15"}]

"""
   In the third dict we have extra key, value.
   In forth we dont have have header_2 were we aspect blank value in our csv file.
"""
process_data = [ [k,v] for _dict in data_dict for k,v in _dict.iteritems() ]           

headers = [ i[0] for i in process_data ]
headers = sorted(list(set(headers)))

result = []
for _dict in data_dict:
    row = []
    for header in headers:
        row.append(_dict.get(header, None))
    result.append(row)


import csv
with open('demo.csv', 'wb') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=';', dialect='excel', 
                            quotechar='|', quoting=csv.QUOTE_MINIMAL)
    spamwriter.writerow(headers)    
    for r in result:
        spamwriter.writerow(r)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当事先不知道字段时使用 DictWriter 写入 CSV 的相关文章

随机推荐