首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python将输出转换为JSON

用Python将输出转换为JSON
EN

Stack Overflow用户
提问于 2022-09-09 19:45:40
回答 1查看 51关注 0票数 0

我很少使用Python代码执行Linux命令。请参考下面的代码和输出。

代码语言:javascript
复制
import os

uptime_from_top_command = "top -c -b -n1 | head -1 | cut -d ' ' -f 4-6 | sed -e 's/,//'"
uptime = os.system(uptime_from_top_command)

load_average_from_top_command = "top -c -b -n1 | head -1 | cut -d ',' -f 4-6 | sed -e 's/^[ \t]*//'"
load_average = os.system(load_average_from_top_command)

我得到了下面的输出。

代码语言:javascript
复制
up 100 days
load average: 0.06, 0.04, 0.00

我需要将此输出转换为以下JSON格式,并将其存储在JSON文件中。

代码语言:javascript
复制
{
    "uptime": "100 days",
    "load average": {
        "1_min": "0.06",
        "5_mins": "0.04",
        "15_mins": "0.00"
    }
}

注意-如果服务器的正常运行时间少于1天,那么它将显示为up 12:45(例如)。在这种情况下,应该以下面的格式将其转换为JSON文件。

代码语言:javascript
复制
{
    "uptime": "12:45",
    "load average": {
        "1_min": "0.06",
        "5_mins": "0.04",
        "15_mins": "0.00"
    }
}

我是说,它应该接受这两种格式。

有人能帮我实现这个目标吗?

EN

回答 1

Stack Overflow用户

发布于 2022-09-09 20:06:58

您可以尝试re模块来解析字符串输出。例如:

代码语言:javascript
复制
import re

s = """\
up 100 days
load average: 0.06, 0.04, 0.00"""

out = {
    "uptime": re.search(r"up ([^\s]+(?: days?)?)", s).group(1),
    "load average": dict(
        zip(
            ("1_min", "5_mins", "15_mins"),
            re.search(r"load average: ([^\s]+) ([^\s]+) ([^\s]+)", s).groups(),
        )
    ),
}

print(out)

指纹:

代码语言:javascript
复制
{
    "uptime": "100 days",
    "load average": {"1_min": "0.06,", "5_mins": "0.04,", "15_mins": "0.00"},
}

编辑:将数据保存在Json文件中:

代码语言:javascript
复制
import re
import json

s = """\
up 100 days
load average: 0.06, 0.04, 0.00"""

out = {
    "uptime": re.search(r"up ([^\s]+(?: days?)?)", s).group(1),
    "load average": dict(
        zip(
            ("1_min", "5_mins", "15_mins"),
            re.search(r"load average: ([^\s]+) ([^\s]+) ([^\s]+)", s).groups(),
        )
    ),
}

with open("data.json", "w") as f_out:
    json.dump(out, f_out, indent=4)

将数据保存到data.json

代码语言:javascript
复制
{
    "uptime": "100 days",
    "load average": {
        "1_min": "0.06,",
        "5_mins": "0.04,",
        "15_mins": "0.00"
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73666845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档