我有以下一段代码,它可以正常工作,但可以打印出它应该输出的数据。我正在尝试(未成功)将结果放入数据帧中,以便可以将结果导出到csv文件。我正在循环一个json文件,结果是正确的,我只需要两列来打印输出到一个数据帧中,而不是打印结果。我去掉了导致错误的代码,所以它可以运行。
import json
import requests
import re
import pandas as pd
data = {}
df = pd.DataFrame(columns=['subtechnique', 'name'])
df
RE_FOR_SUB_TECHNIQUE = r"(T\d+)\.(\d+)"
r = requests.get('https://raw.githubusercontent.com/mitre/cti/master/enterprise-attack/enterprise-attack.json', verify=False)
data = r.json()
objects = data['objects']
for obj in objects:
ext_ref = obj.get('external_references',[])
revoked = obj.get('revoked') or '*****'
subtechnique = obj.get('x_mitre_is_subtechnique')
name = obj.get('name')
for ref in ext_ref:
ext_id = ref.get('external_id') or ''
if ext_id:
re_match = re.match(RE_FOR_SUB_TECHNIQUE, ext_id)
if re_match:
technique = re_match.group(1)
sub_technique = re_match.group(2)
print('{},{}'.format(technique+'.'+sub_technique, name))除非有更简单的方法将每一行的结果放在循环中并将其附加到csv文件中。
任何帮助都是非常感谢的。
谢谢
发布于 2020-08-15 02:57:38
在这种情况下,直接编写csv文件可能比通过Pandas更容易:
with open("enterprise_attack.csv", "w") as f:
my_writer = csv.writer(f)
for obj in objects:
ext_ref = obj.get('external_references',[])
revoked = obj.get('revoked') or '*****'
subtechnique = obj.get('x_mitre_is_subtechnique')
name = obj.get('name')
for ref in ext_ref:
ext_id = ref.get('external_id') or ''
if ext_id:
re_match = re.match(RE_FOR_SUB_TECHNIQUE, ext_id)
if re_match:
technique = re_match.group(1)
sub_technique = re_match.group(2)
print('{},{}'.format(technique+'.'+sub_technique, name))
my_writer.writerow([technique+"."+sub_technique, name])应该注意的是,上述操作将覆盖任何先前运行的输出。如果您希望保留多次运行的输出,请将文件模式更改为"a":
with open("enterprise_attack.csv", "a") as f:https://stackoverflow.com/questions/63418400
复制相似问题