将结构不一致的文本文件变成项数不一致的JSON对象

2024-04-29 08:30:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的文件结构,包含数百行数据:

RHSA-2019:1797 CVE-2017-17485,CVE-2018-12022,CVE-2018-12023,CVE-2018-14718,CVE-2018-14719,CVE-2018-19360,CVE-2018-19361,CVE-2018-19362 cpe:/a:redhat:jboss_bpms:6.4
<> P>数据中唯一的一致性是要分离的3个字段之间的空间,以及中间数据的逗号。标记为RHSA的第一个数据类型的项目数始终为1,标记为CVE的数据从1到20个项目以及标记为CPE的数据变化。你知道吗

我曾尝试使用split()将字符串拆分,但我确信这可以用python一步完成,因为数据集的项数不一致,但结构不一致。你知道吗

我使用

data = rh.split()
for temp in data:
    print(temp)

所以现在我有了

RHSA-2019:1797 

CVE-2017-17485,CVE-2018-12022,CVE-2018-12023,CVE-2018-14718,CVE-201814719,CVE-2018-19360,CVE-2018-19361,CVE-2018-19362 


cpe:/a:redhat:jboss_bpms:6.4

其中每个数据集都在一个单独的行上,因此理想情况下,我希望每3行循环一次,并将数据放入json中,如下所示:

[{"RHSA":{ "RHSA-2019:1797},
 {"CVE" :{ "CVE-2017-17485",
           "CVE-2018-12022",
           "CVE-2018-12023",
           "CVE-2018-14718",
           "CVE-2018-14719",
           "CVE-2018-19360",
           "CVE-2018-19361",
           "CVE-2018-19362" },
 {"CPE" :{ "cpe:/a:redhat:jboss_bpms:6.4"}]

Tags: 文件数据标记data结构tempjboss一致性
1条回答
网友
1楼 · 发布于 2024-04-29 08:30:52

示例中提供的JSON不是有效的JSON,但此脚本生成类似的内容:

line = 'RHSA-2019:1797 CVE-2017-17485,CVE-2018-12022,CVE-2018-12023,CVE-2018-14718,CVE-2018-14719,CVE-2018-19360,CVE-2018-19361,CVE-2018-19362 cpe:/a:redhat:jboss_bpms:6.4'

import re
from collections import defaultdict
import json

d = defaultdict(list)

for i in line.split():
    d[re.findall(r'^(\w+)', i)[0].upper()].extend(i.split(','))

print(json.dumps(d, indent=4))

印刷品:

{
    "RHSA": [
        "RHSA-2019:1797"
    ],
    "CVE": [
        "CVE-2017-17485",
        "CVE-2018-12022",
        "CVE-2018-12023",
        "CVE-2018-14718",
        "CVE-2018-14719",
        "CVE-2018-19360",
        "CVE-2018-19361",
        "CVE-2018-19362"
    ],
    "CPE": [
        "cpe:/a:redhat:jboss_bpms:6.4"
    ]
}

相关问题 更多 >