将某病毒库数据整理为json数据的参考代码

首先需要整理的数据格式如下图所示,大多数格式都是前一行为json的key,下一行为json的value。但是其中有少量数据是以“:”分割,例如类型、发现日期等。本文直接读取某一行数据,将每一行数据进行去除\r\n\t操作,然后将他们统一添加到数组中,如果遇到:分割的数据,则以:进行分割成两个句子统一加入数组。

准备

lines = [] #将一页内容保存至此列表里
lines_total = [] # 将所有的列表保存至此列表里
dict = {} #将遍历列表内容保存至此字典里
整理数据
with codecs.open(path, "r", encoding="utf-8") as f:
    for line in f:
        if "####" in line:  #为了让计算机了解什么时候是下一页数据,我们以####作为一页的结束标志
            lines_total.append(lines) #将保存到的一页列表保存至总列表中
            line = []   #清空上一页列表数据
            continue
        if "发现日期:" in line:
            line = line.replace("\t", "")
            line = line.strip().split(":")
            lines = lines+line #注意split返回的是列表,所以应该是用+,而不是appen。

在上面的代码中,我们只拿数据集中发现日期的例子进行距离,其他的数据于此一样。(只针对上文图片中的数据),特殊的数据整理完成后,我们将普通的数据也就是如下的数据进行处理。

病毒名称
W97M/Melissa.m@mm

别名
Melissa.M

普通数据处理代码

 
else:
            line_t = line.replace("\t", "")
            line_r = line_t.replace("\r", "")
            line_n = line_r.replace("\n", "")
            if not line_n: #这里是因为我们数据又很多空行,所以我们需要判断获取的数据是否为空字符
                continue
            lines.append(line_n)#将非空字符的数据添加至lines列表中

到这里后我们数据的格式就应该为如下:

['病毒名称', 'W97M/Melissa.m@mm', '别名', 'Melissa.M', '变体', 'W97M/梅丽莎.Q病毒宏', '发现日期', '99年7月6日', '类型', '病毒']

很明显通过判断奇偶就可以判断哪些数据应该为key,哪些数据应该为Value,代码如下

i = 0 #因为i列表索引初始为0,所以我们应该也从0开始
for x in lines_total: #因为我们前文将一页的列表加入到了总的列表中,列表格式[[]],所以是双循环
    for i in range(len(x)):
        if i % 2 == 0:
            dict[x[i]] = ""

        else:
            dict[x[i - 1]] = x[i]

然后将python对象转换为json数据,代码如下

json_data = json_data + json.dumps(dict, ensure_ascii=False).join("\r\n")

当然,你得给json_data赋一个初始值,这里只能赋空字符串,因为Json.dumps返回的是json字符串。当然最后如果还应该给dict字典赋空,进行下一页的内容转换。

最后将json_data写入新的文件中即可。代码如下

with codecs.open(save, "w", encoding="utf-8") as w:
    w.write(json_data)

最后转换来的数据格式如下

{"病毒名称": "W97M/Melissa.m@mm", "别名": "Melissa.M", "变体": "W97M/梅丽莎.Q病毒宏", "发现日期": "99年7月6日", "类型": "病毒", "子类型": "宏", "风险评估": "中等的", "最小数据": "4035", "DAT 发布日期": "1999年7月21日", "病毒特征": "这是针对Word 97 文档的病毒,能够在Word 97 的SR-1 版本下复制。该宏病毒会感染Word 的normal.dot 文件。它将关闭Word 97的宏警告功能。该病毒由一个名为MelissaFX的模块组成。该病毒基于 Melissa,但有显着差异。这是一种隐形病毒;它会尝试拦截宏查看命令以试图隐藏其存在。与 Melissa.a 一样,它通过电子邮件扩大传播范围。它会尝试将受感染的文档发送给 Outlook 地址簿中 30% 到 60% 的人员。具有随机主题的邮件可能包含从默认 Outlook 文件夹中随机选择的正文、随机优先级以及附加的受感染文档。随机主题是通过从每个列表中取出一个单词或短语来构建的:“你好!”、“嗨”、{什么都没有}“这里”、“我认为这个”、“哎呀......猜猜这个”“是”、“曾经是”、“是”“那个”、“那个” \", \"你的\"\"文件\", \"文档\", \".doc\"\"你请求的\", \"他们问的\", {无任何}该病毒会尝试让其他人访问您的计算机。它共享驱动器 C,无需密码,并将“c:\\progra~1\\cuteftp\\tree.dat”连同用户名、PC 名称、组织名称和时区邮寄到电子邮件地址:infx@iname .com, fafx@fastermail.com和 apfx@apexmail.com。", "症状": "如上所述的电子邮件传播,在未受感染的系统上打开受感染的文档时发出宏警告。", "感染方式": "打开受感染文档将直接感染全局模板并向其他用户发送电子邮件。受感染系统上使用的任何文档都将被感染。", "删除指令": "脚本、批处理、宏和非内存驻留:使用指定的引擎和DAT文件进行检测和删除。", "PE、木马、网络蠕虫和内存驻留:": "使用指定的引擎和DAT文件进行检测。要删除,请引导至 MS-DOS 模式或使用引导软盘并使用命令行扫描程序:SCANPM /ADL /清洁/全部", "Windows ME 信息:": "注意:Windows ME 使用备份实用程序将选定的文件自动备份到 C:\\_Restore 文件夹。这意味着受感染的文件可以作为备份文件存储在那里,VirusScan 将无法删除这些文件。这些说明解释了如何从 C:\\_Restore 文件夹中删除受感染的文件。"}
{"病毒名称": "Mini-45", "别名": "Mini", "变种": "迷你35病毒文件感染者", "发现日期": "91 年 4 月 1 日", "起源": "保加利亚", "长度": "45字节", "类型": "病毒", "子类型": "文件感染者", "风险评估": "低的", "最小数据": "4002", "DAT 发布日期": "1998年2月12日", "病毒特征": "Mini-45 是一种覆盖文件感染病毒。它不会驻留在内存中。它感染 .COM 文件,包括 COMMAND.COM。每次执行感染Mini-45的文件时,病毒都会感染当前目录中的所有.COM文件。", "补充说明": "Mini-45 病毒于 1991 年 4 月收到。它最初来自保加利亚。该病毒是一种非常驻的覆盖病毒,会感染 .COM 文件,包括 COMMAND.COM。当执行感染Mini-45的程序时,病毒会通过用病毒代码覆盖程序的前45字节来感染当前目录中的所有.COM程序。不会注意到文件大小增加,除非原始程序的长度小于 45 个字节,在这种情况下,它现在的长度将是 45 个字节。磁盘目录中的.COM程序的日期和时间将更新为当前系统感染的日期和时间。所有感染Mini-45的.COM程序在感染后都将无法正常运行。由于前 45 个字节丢失,这些程序将被永久损坏。Mini-45 的已知变体有:", "症状": "该病毒通过覆盖文件的前 45 个字节来感染当前目录中的所有 .COM 文件。文件大小不会增加,除非原始文件的长度小于 45 字节,在这种情况下,文件的长度将变为 45 字节。磁盘目录中的.COM 文件的日期和时间将更新为当前系统感染日期和时间。所有感染 Mini-45 的 .COM 文件在感染后都无法正常运行。由于前 45 个字节丢失,这些文件将被永久损坏。", "感染方法": "用感染病毒的文件感染计算机的唯一方法是在计算机上执行受感染的文件。受感染的文件可能来自多种来源,包括:软盘、通过在线服务下载、网络等。一旦执行受感染的文件,病毒可能会激活。", "删除指令": "脚本、批处理、宏和非内存驻留:使用指定的引擎和DAT文件进行检测和删除。", "PE、木马、网络蠕虫和内存驻留:": "使用指定的引擎和DAT文件进行检测。要删除,请引导至 MS-DOS 模式或使用引导软盘并使用命令行扫描程序:", "Windows ME 信息:": "注意:Windows ME 使用备份实用程序将选定的文件自动备份到 C:\\_Restore 文件夹。这意味着受感染的文件可以作为备份文件存储在那里,VirusScan 将无法删除这些文件。这些说明解释了如何从 C:\\_Restore 文件夹中删除受感染的文件。"}

如果你原始的数据和我的原始数据格式差不多,可以参考。如果你在运行后,数据的key和value乱序,这个是可能因为你的数据集value占用了几行,此代码中他只能占用一行(因为我们我们读是一行一行读取数据加入列表中,然后利用列表奇偶索引进行区分的嗷)。

我很菜,我知道,有问题骂谁都可以别骂我捏,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ylopi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值