如何在 python 中使用 argparse 和 json 文件
Posted
技术标签:
【中文标题】如何在 python 中使用 argparse 和 json 文件【英文标题】:How to use argparse with json files in python 【发布时间】:2021-04-20 20:25:52 【问题描述】:我正在使用 Python 开发一个项目,并尝试使用 argparse
设置一些参数。当我在终端中键入其中一个时,我从 JSON 文件中获得了一些信息,但我不知道该怎么做。到目前为止,我得到了这些东西:
"services": [
"name": "ac",
"version": "1.0.8",
"service": "running",
"url": "https://portal.azure.com/#home",
"disk usage": "20%"
,
"name": "acc",
"version": "1.0.8",
"service": "running",
"url": "https://portal.azure.com/#home",
"disk usage": "63%"
,
"name": "acv",
"version": "1.0.8",
"service": "running",
"url": "https://portal.azure.com/#home",
"disk usage": "37%"
,
"name": "acf",
"version": "1.0.8",
"service": "running",
"url": "https://portal.azure.com/#home",
"disk usage": "48%"
,
"name": "ach",
"version": "1.0.8",
"service": "error",
"url": "https://portal.azure.com/#home",
"disk usage": "10%"
,
"name": "acj",
"version": "1.0.8",
"service": "stopped",
"url": "https://portal.azure.com/#home",
"disk usage": "23%"
,
"name": "acq",
"version": "1.0.8",
"service": "running",
"url": "https://portal.azure.com/#home",
"disk usage": "65%"
,
"name": "bc",
"version": "1.0.8",
"service": "stopped",
"url": "https://portal.azure.com/#home",
"disk usage": "20%"
,
"name": "bcc",
"version": "1.0.8",
"service": "running",
"url": "https://portal.azure.com/#home",
"disk usage": "25%"
,
"name": "bcx",
"version": "1.0.8",
"service": "error",
"url": "https://portal.azure.com/#home",
"disk usage": "4%"
,
"name": "bcn",
"version": "1.0.8",
"service": "running",
"url": "https://portal.azure.com/#home",
"disk usage": "50%"
,
"name": "bcm",
"version": "1.0.8",
"service": "stopped",
"url": "https://portal.azure.com/#home",
"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()
我有更多代码,但它是打印所有 JSON 文件,其中带有一个 with open 和一个 for 实例,但我想要打印例如使用参数 -s
的服务。
【问题讨论】:
做一个print(args)
看看解析器做了什么(假设它没有引发错误并且相当)。这些属性之一,例如args.s
应该是文件名。只需使用 Python json
文件阅读器来加载和解析该文件。
是完整的json文件吗?
【参考方案1】:
您可以使用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"]:\tservice["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%'
【讨论】:
感谢@Tenacious B!我有个问题!!使用此代码运行程序时出现错误。“NameError: name 'json_data' is not defined” 我想我必须定义一些 Json_data。另一个问题是如何将此代码与 argparse 一起使用。示例:我想在终端上放置“name.py -s”来打印服务或 -d 来打印磁盘使用情况。这可能吗? 您将需要更改变量名称以适应您的其余代码 @MaximilianoCorreajson_data
只是我在您的问题中分配给您的json字符串的变量以上是关于如何在 python 中使用 argparse 和 json 文件的主要内容,如果未能解决你的问题,请参考以下文章
Python Argparse,如何正确组织 ArgParse 代码
如何使用 argparse Python 在 SQL 查询中传递日期范围参数
如何使用 Python 中的 argparse 和 csv 库编写文件?
如何在 Python 中使用 argparse 传递 Shell 脚本样式参数
如何在 CMD 中不传递“python”的情况下使用 argparse?
Pyspark 和使用 UDF:如何将 Python 参数(sys.argv、argparse)传递给 Python Worker?