python - 垂直读取和写入多个字典到csv文件

标签 python json pandas csv dictionary

我有多个 json 格式的字典“some.json”,如下所示

{
  "my_dict" : {
    'key1': 'value1', 
    'key2': 'value2', 
    'key3': 'value3'
  },
  "my_dict2" : {
    'key8': 'value8', 
    'key9': 'value9', 
    'key10': 'value10'
  }
}

键和值都是字符串。我想将其垂直导出为 csv 格式,然后将其读回 json 文件。例如,当我将一个项目添加到 csv 格式的 my_dict 时,它也会添加到 json 文件中。

所需的输出

my_dict
key1,value1
key2,value2
key3,value3
my_dict2
key8,value8
key9,value9
key10,value10

到目前为止我已经找到了解决方案,但问题是,字典的名称没有写在 csv 文件中,因此无法读回 json 文件

import pandas as pd

with open('some.json') as f_input:
    df = pd.read_json(f_input)

df = df.bfill(axis='columns')
df.iloc[:, 0].to_csv('some.csv', encoding='utf-8', header=False)

最佳答案

使用 file.write 创建新文件作为字典名称:

import json

with open('some.json') as f:    
    d = json.load(f)  

#sample
d = { "my_dict" : { 'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}, 
      "my_dict2" : { 'key8': 'value8', 'key9': 'value9', 'key10': 'value10'}}
     
with open("some1.csv", 'w') as f:
     for k, v in d.items():
         f.write(k + '\n')
         for k1, v1 in v.items():
             f.write(f"{k1},{v1}\n")

my_dict
key1,value1
key2,value2
key3,value3
my_dict2
key8,value8
key9,value9
key10,value10

并回读:

df = pd.read_csv("some1.csv", names=['a','b']) 

m = df['b'].isna()
df['new'] = df['a'].where(m).ffill()
s = df[~m].set_index(['new','a'])['b']

d = {level: s.xs(level).to_dict() for level in s.index.levels[0]}
print (d)
{'my_dict': {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'},
 'my_dict2': {'key8': 'value8', 'key9': 'value9', 'key10': 'value10'}}

编辑:

如果应更改格式:

d = { "my_dict" : { 'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}, 
      "my_dict2" : { 'key8': 'value8', 'key9': 'value9', 'key10': 'value10'}}

with open("some1.csv", 'w') as f:
     for k, v in d.items():
         for k1, v1 in v.items():
             f.write(f"{k},{k1},{v1}\n")
             
my_dict,key1,value1
my_dict,key2,value2
my_dict,key3,value3
my_dict2,key8,value8
my_dict2,key9,value9
my_dict2,key10,value10

s = pd.read_csv("some1.csv", names=['b'], squeeze=True)
print (s)
my_dict   key1      value1
          key2      value2
          key3      value3
my_dict2  key8      value8
          key9      value9
          key10    value10
Name: b, dtype: object


d = {level: s.xs(level).to_dict() for level in s.index.levels[0]}
print (d)
{'my_dict': {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'},
 'my_dict2': {'key8': 'value8', 'key9': 'value9', 'key10': 'value10'}}

关于python - 垂直读取和写入多个字典到csv文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70196078/

相关文章:

json - 嵌套 json 的 Azure JMESPATH 查询

javascript - to_json 不能在 javascript 中为 rails 3.2.11 中的 mongoid 对象工作

python - 如何从数据帧中但从每个标签中随机删除行?

python - 如何在 Pandas 中旋转多标签表

Python - 记录字符串之前的内容

python - 忽略验证 SSL 证书 python 套接字

python - Pandas Series.apply() 和 Series.map() 有什么区别?

python (gspread) - 整个数据表放置在我的 Google Sheets 的一个单元格中,而不是单独的单元格中

jquery - Laravel 格式查询 json 结果

python - 不能在 Pandas 中乘以 2 列