将嵌套字典列表读写至CSV文件(Python)
我有一个数据结构,长得像这样:
data =[
{'key_1': { 'calc1': 42, 'calc2': 3.142 } },
{'key_2': { 'calc1': 123.4, 'calc2': 1.414 } },
{'key_3': { 'calc1': 2.718, 'calc2': 0.577 } }
]
我想把这些数据保存到一个CSV文件里,并且能够从这个文件中加载数据,格式要像下面这样:
key, calc1, calc2 <- header
key_1, 42, 3.142 <- data rows
key_2, 123.4, 1.414
key_3, 2.718, 0.577
用Python有什么好的方法可以把这个数据结构读入或保存到上面那种CSV文件里呢?
3 个回答
-1
我觉得最简单的方法就是先把字典转换成一个 pandas 数据框,然后再很方便地转成 csv 文件。
import pandas as pd
df = pd.DataFrame.from_dict(data, orient='index') # it is either ‘columns’ or ‘index’ (simple transpose)
df.to_csv('filepath/name.csv')
要把文件再加载回字典的形式
df.to_csv('filepath/name.csv')
data_dict = df.to_dict()
如果情况比较复杂,可以看看 pandas 的文档,里面有详细的说明:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.from_dict.html 和 http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_dict.html
6
这里给大家展示一个使用csv模块的版本:
from csv import DictWriter
data =[
{'key_1': { 'calc1': 42, 'calc2': 3.142 } },
{'key_2': { 'calc1': 123.4, 'calc2': 1.414 } },
{'key_3': { 'calc1': 2.718, 'calc2': 0.577 } }
]
with open('test.csv', 'wb') as f:
writer = DictWriter(f, ['key', 'calc1', 'calc2'])
writer.writerow(dict(zip(writer.fieldnames, writer.fieldnames))) # no automatic header :-(
for i in data:
key, values = i.items()[0] # each dict in data contains only one entry
writer.writerow(dict(key=key, **values)) # first make a new dict merging the key and the values
5
我觉得用 csv
模块可能不太行,因为你的需求和结构有些特别。不过,你可以很简单地手动写出来:
>>> with open('test.txt', 'w') as f:
f.write(','.join(['key', 'calc1', 'calc2']) + '\n')
f.writelines('{},{},{}'.format(k, *v.values()) + '\n' for l in data for k,v in l.items())