我想使用python3来解析";指挥部>;系统信息“;转换为json
我想将命令我想使用python3来解析";指挥部>;系统信息“;转换为json,json,python-3.x,parsing,Json,Python 3.x,Parsing,我想将命令systeminfo的输出转换成json。 但我只需要一些具体的信息。 我必须避开第一行(命令行),它并不总是在第1行 如何通过python3实现这一点 我将输出保存到.txt文件中。 下面是输出的一部分 C:\Users\user\Desktop>systeminfo Host Name: COMPUTERHOPE OS Name: Microsoft Windows 10 Pro OS Version:
systeminfo
的输出转换成json。
但我只需要一些具体的信息。
我必须避开第一行(命令行),它并不总是在第1行
如何通过python3实现这一点
我将输出保存到.txt文件中。
下面是输出的一部分
C:\Users\user\Desktop>systeminfo
Host Name: COMPUTERHOPE
OS Name: Microsoft Windows 10 Pro
OS Version: 10.0.10586 N/A Build 10586
OS Manufacturer: Microsoft Corporation
OS Configuration: Standalone Workstation
OS Build Type: Multiprocessor Free
Registered Owner: Computerhope
Registered Organization: Computer Hope
Product ID: 00000-00000-00000-AAAAA
Original Install Date: 12/17/2015, 7:09:50 PM
System Boot Time: 3/28/2016, 6:57:39 AM
System Manufacturer: Dell Inc.
System Model: XPS 8300
System Type: x64-based PC
Processor(s): 1 Processor(s) Installed.
[01]: Intel64 Family 6 Model 42 Stepping 7 Genuine Intel ~3401
我希望它是这样的
{
"Host Name": "COMPUTERHOPE",
"OS Name": "Microsoft Windows 10 Pro",
"OS Version": "10.0.10586 N/A Build 10586",
"Original Install Date":
{
"Date": "12/17/2015",
"Time": "7:09:50 PM",
}
}
脚本执行命令systeminfo
,并获取标准输出
stdout在for
循环中逐行处理,然后
使用str.partition
方法拆分为键和值
如果密钥名称不以空格开头,则它是根密钥。
如果它与其中一个特殊密钥名匹配,则将使用
字典类型的值,否则将使用当前值进行设置。
密钥名称保存到prevkey
,以便在满足else条件时
已触发,prevkey
可用作根键和
键和值将设置为该根键
在else条件下,方括号从键上移除,
尽管这可以被视为一种可选的偏好
如果dic
是某种东西,那么它将被写入systeminfo.json
如果您只需要某些密钥,则可以将感兴趣的密钥保存到
一本单独的字典并将其写入文件
作为从现有文件读取的主代码,请使用:
stdout = ''
# Read from existing file.
with open('sysinfo.txt') as r:
stdout = r.read()
# Get dic from stdout (or read file content).
dic = dic_from_systeminfo(stdout)
# Write the dic to file.
if dic:
with open('systeminfo.json', 'w', encoding='utf-8') as w:
json.dump(dic, w, indent=4)
如果您没有将命令的运行和stdout的检索与使用
str.partition
对输出的非常干净的解析混为一谈,OP会更清楚。OP已经声明他已将输出捕获到文本文件中。或者将您的答案分为两部分-将命令输出检索到一个文件,然后分析该文件。@PaulMcG,用您的建议更新了答案。如果需要,可以省略get_systeminfo
功能,打开、读取文件,并将内容从_systeminfo功能传递到dic_。感谢您的回复。但它有一个错误<代码>文件“par.py”,第41行,dic_from_systeminfo dic[prevkey][key]=值类型错误:“str”对象不支持项目分配。
还有一个问题,因为数据是给定的。我可以用open('sysinfo.txt')的作为标准输出吗。避免将设置为标准输出
,因为它将标准输出
设置为文件描述符(文件句柄)。在我使用r
作为文件描述符的底部查看我的更新答案。先前的评论,无法复制<代码>值
被分配给字典,因此是一条奇数消息。试试我发布的代码,看看是否可以。
stdout = ''
# Read from existing file.
with open('sysinfo.txt') as r:
stdout = r.read()
# Get dic from stdout (or read file content).
dic = dic_from_systeminfo(stdout)
# Write the dic to file.
if dic:
with open('systeminfo.json', 'w', encoding='utf-8') as w:
json.dump(dic, w, indent=4)