我有一个包含数百行数据的文件结构:
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数据中唯一的一致性是我想要分隔的3个字段之间的空格和中间数据的逗号。标记为RHSA的第一个数据类型的项数始终为1,标记为CVE的数据和标记为CPE的数据的项数从1到20不等。
我曾尝试使用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"}]发布于 2019-07-18 04:57:35
您在示例中提供的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"
]
}https://stackoverflow.com/questions/57083829
复制相似问题