gpt4 book ai didi

python - 命令行输出的解析器

转载 作者:行者123 更新时间:2023-12-01 00:09:53 28 4
gpt4 key购买 nike

我得到以下格式的命令行输出

server
3 threads started
1.1.1.1 ONLINE at SUN
version: 1.2.3.4
en: net

1.1.1.2 ONLINE at SUN
version: 1.2.3.5
en: net

1.1.1.3 OFFLINE at SUN
version: 1.2.3.6
en: net

File: xys
high=600
low=70
name=lmn

我想要像这样的解析输出

l1 = [
{
"1.1.1.1": {
"status": "ONLINE",
"version": "1.2.3.4",
"en": "net"
},
"1.1.1.2": {
"status": "ONLINE",
"version": "1.2.3.5",
"en": "net"
},
"1.1.1.3": {
"status": "OFFLINE",
"version": "1.2.3.6",
"en": "net"
}
}
]

l2 = {
"File": "xys",
"high": 600,
"low": 70,
"name": "lmn"
}

我将所有这些都放在一个字符串中。我已按\n 分割字符串并创建了一个列表,然后从“File”关键字创建了主列表的 2 个列表。然后分别解析两个列表。

index = [i for i in range(len(output)) if "File" in output[i] ]
if index:
list1 = output[:index[0]]
list2 = output[index[0]:]


是否有其他更有效的方法来解析此输出。

最佳答案

你所做的一切都会正常。

您应该对此担心多少取决于这是否只是为一些自动化测试完成的一些快速设置,或者该代码是否用于企业环境中必须保持运行的服务,但我有一件事需要担心的是,如果 File: ... 不再是 IP 地址后面的行,会发生什么情况。如果您想确保这不会抛出您的代码,您可以逐行解析字符串。

您需要解析器检查以下所有情况:

  • 单词服务器
  • 服务器一词后面关于启动了多少线程的注释
  • “服务器”一词后面的任何其他注释
  • IP 地址(正则表达式是你的 friend )
  • 找到 IP 地址后的缩进区域
  • 用冒号分隔的键值对
  • 用等号分隔的键值对

但实际上,我认为你所做的看起来很棒。如果需要的话,将代码从搜索"file"更改为其他内容并不难。您需要花一点时间验证"file"是否始终处理 IP 地址。如果可靠性非常重要,那么当事情发生的顺序发生变化时,您将需要做一些额外的工作来保护自己免受以后遇到问题的影响。

关于python - 命令行输出的解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59701570/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com