如何在python中将argparse与json文件一起使用

如何解决如何在python中将argparse与json文件一起使用

我正在用 Python 处理一个项目,我试图用 argparse 设置一些参数。当我在终端中输入其中一个时,我从 JSON 文件中获得了一些信息,但我不知道如何去做。到目前为止,我得到了这些东西:

{
  "services": [
    {
      "name": "ac","version": "1.0.8","service": "running","url": "https://portal.azure.com/#home","disk usage": "20%"
    },{
      "name": "acc","disk usage": "63%"
    },{
      "name": "acv","disk usage": "37%"
    },{
      "name": "acf","disk usage": "48%"
    },{
      "name": "ach","service": "error","disk usage": "10%"
    },{
      "name": "acj","service": "stopped","disk usage": "23%"
    },{
      "name": "acq","disk usage": "65%"
    },{
      "name": "bc",{
      "name": "bcc","disk usage": "25%"
    },{
      "name": "bcx","disk usage": "4%"
    },{
      "name": "bcn","disk usage": "50%"
    },{
      "name": "bcm","disk usage": "35%"
    }
  ]
}

这是我的 JSON 文件,这些是我的 .py 中的参数:

#argparse parameters config
parser = argparse.ArgumentParser()
parser.add_argument("-f","--fullreport",help="printing the full report",default="*")
parser.add_argument("-g","--graphreport",help="printing the graph report",default="*")
parser.add_argument("-s","--services",help="services to be test",default=["*"])
parser.add_argument("-d","--diskusage",help="see the disk usage")

args = parser.parse_args()

我有更多代码,但它是使用 with open 和 a for 例如打印所有 JSON 文件,但我想要的是仅打印例如使用参数 -s 的服务。

解决方法

您可以使用 for 循环:

def print_service_names(data):
    print('Services:')
    for service in data['services']:
        print(service['name'])

def print_service_disk_usages(data):
    print('Disk Usage:')
    for service in data['services']:
        print(f'{service["name"]}:\t{service["disk usage"]}')

print_service_names(json_data)
print_service_disk_usages(json_data)

输出:

Services:
ac
acc
acv
acf
ach
acj
acq
bc
bcc
bcx
bcn
bcm

Disk Usage:
ac:     20%
acc:    63%
acv:    37%
acf:    48%
ach:    10%
acj:    23%
acq:    65%
bc:     20%
bcc:    25%
bcx:    4%
bcn:    50%
bcm:    35%

如果你打算用数据做一些更高级的事情,你可以使用推导来重塑它:

# format the data with comprehensions
service_names = [service['name']
                 for service in json_data['services']]
disk_usage = {service['name']: service['disk usage']
              for service in json_data['services']}

from pprint import pprint
pprint(service_names)
pprint(disk_usage)

输出:

['ac','acc','acv','acf','ach','acj','acq','bc','bcc','bcx','bcn','bcm']

{'ac': '20%','acc': '63%','acf': '48%','ach': '10%','acj': '23%','acq': '65%','acv': '37%','bc': '20%','bcc': '25%','bcm': '35%','bcn': '50%','bcx': '4%'}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?