【问题标题】:merge multiple JSON or output single JSON file in python在python中合并多个JSON或输出单个JSON文件
【发布时间】:2019-01-20 09:31:16
【问题描述】:

在这个 python 脚本中,我正在对服务器进行 REST 调用并将信息提取到 JSON 文件中。使用以下代码,我将 4 个 JSON 文件输出到一个文件夹中。我想只输出 1 个包含我需要的所有信息的 json 文件,我该怎么做? 如果那不可能,那么我认为合并 4 个 JSON 文件将是我唯一的选择吗?任何帮助将不胜感激。

from subprocess import call
import os
import json
from glob import glob

fileName = "IP.txt"
file = open(fileName, "r")
for str in file:
login_info = str.split(':')
ip = login_info[0] 
username = login_info[1]
password = login_info[2]
os.mkdir(ip)

  call(["ilorest", "login", ip, '-u', 
  username, '-p', password])

  call(["ilorest", "save", '-- 
  selector=ComputerSystem', '--json', '-f', 
  ip+"\\"+ip+".json"])

  call(["ilorest", "save", '-- 
  selector=Memory', '--json', '-f', 
  ip+"\\"+ip+"_memory"+".json"])

  call(["ilorest", "save", '-- 
  selector=Processor', '--json', '-f', 
  ip+"\\"+ip+"_processor"+".json"])

  call(["ilorest", "save", '-- 
  selector=HPESmartStorageDiskDrive', '-- 
  json', '-f', 
  ip+"\\"+ip+"_drives"+".json"])

  call(["ilorest", "logout"])


paths = glob('*/')
for d in paths:
print(os.dir(d))

【问题讨论】:

  • 您可以将所有四个元素添加到列表中,然后将列表保存为 JSON。看subprocess.check_output
  • 如果合并是解决方案,你会怎么做?结果如何?你想在里面放什么?
  • 所有文件的格式完全相同,实际上第一部分是相同的。我希望它们作为单个文件的唯一原因是因为我更容易解析它们并将它们加载到我的 sql 表中。我宁愿每个 IP 有 1 个非常长的文件,而不是每个 IP 有 4 个文件。

标签: python json merge


【解决方案1】:

只需用所有 json 对象创建一个 dict,然后转储它:

types = ['', '_memory', '_processor', '_drives']

result = {}
for suffix in types:
    with open(os.path.join(ip, ip + suffix + '.json')) as f:
        result[suffix.strip('_')] = json.load(f)
with open(os.path.join(ip, ip+ '_all.json'), 'w') as fw:
    json.dump(result, fw)

【讨论】:

  • 我只是将它添加到我的文件末尾还是应该在某个地方编辑我的代码?
  • @JohnMonte 只需添加即可。它将读取所有 4 个文件并生成一个包含内容的文件。也就是说,您可能想从另一个答案中检查库,因为在 python 进程中执行所有操作似乎比调用子进程 4 次更有效。然后您可以首先生成一个文件,从而避免合并。
  • 这就是我开始尝试弄清楚我是否可以为我需要的所有信息执行一个过程的地方。我会再看一遍,但我相信电话必须分开,但我会再看一遍,因为我同意它非常低效。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-13
  • 2022-01-23
  • 2021-09-19
  • 2016-05-18
  • 1970-01-01
相关资源
最近更新 更多