Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我想使用python3来解析";指挥部>;系统信息“;转换为json_Json_Python 3.x_Parsing - Fatal编程技术网

我想使用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)