Python字符串到文件

Python字符串到文件,python,json,pandas,string,Python,Json,Pandas,String,我正在使用一个名为PyAttck的模块来提取数据,我有以下代码: from pyattck import Attck attack = Attck() for technique in attack.enterprise.techniques: print(technique.id) print(technique.name) for subtechnique in technique.subtechniques: print(subtechnique

我正在使用一个名为PyAttck的模块来提取数据,我有以下代码:

from pyattck import Attck

attack = Attck()

for technique in attack.enterprise.techniques:
    print(technique.id)
    print(technique.name)
    for subtechnique in technique.subtechniques:
        print(subtechnique.id)
        print(subtechnique.name)

这让我可以打印数据,并查看它们的类型。有什么方法可以将这些数据导出到CSV或JSON文件中吗?

首先,我会将数据展平,然后使用一个简单的函数写入文件:

#您的数据结构
attck_数据=[
{'id':'0','name':'technique1','subtechniques':[
{'id':'0','name':'subtechnique0'},
{'id':'1','name':'subtechnique1'},
{'id':'2','name':'subtechnique2'},
]},
{'id':'1','name':'technique2','subtechniques':[
{'id':'3','name':'subtechnique3'},
{'id':'4','name':'subtechnique4'},
]},
]
#列出理解以将数据塑造成可用的格式
attck_flat=[{'id':技术['id'],
“名称”:技术[“名称”],
“子项名称”:子技术[“名称”],
'sub_id':子技术['id']}
用于attck_数据中的技术
对于技术中的子技术[“子技术”]]
#让我们看看新的数据
从pprint导入pprint
pprint(attck_扁平)
注意:我使用了一个字典列表来假设
Attck
类的数据结构,因为它的方式是不可复制的,即
technical.id
而不是
technical['id']

您的代码将改为如下所示:

attck_flat=[{'id':technology.id,
“name”:technology.name,
“sub_name”:subtechnique.name,
'sub_id':subtechnique.id}
用于攻击中的技术。企业技术
用于技术中的子技术。子技术]
输出:

sub_name,name,id,sub_id
subtechnique0,technique1,0,0
subtechnique1,technique1,0,1
subtechnique2,technique1,0,2
subtechnique3,technique2,1,3
subtechnique4,technique2,1,4
[{'id':'0','name':'technique1','sub_id':'0','sub_name':'subtechnique0'},
{'id':'0','name':'technique1','sub_id':'1','sub_name':'subtechnique1'},
{'id':'0','name':'technique1','sub_id':'2','sub_name':'subtechnique2'},
{'id':'1','name':'technique2','sub_id':'3','sub_name':'subtechnique3'},
{'id':'1','name':'technique2','sub_id':'4','sub_name':'subtechnique4'}]
在这里,您可以使用我常用的json/csv编写器之一

json:

#编写json文件的函数
导入json
def write_json(数据,路径:str,缩进=4):
打开(路径“w”)作为文件:
dump(数据、文件、缩进=缩进)
写json(attck平面“./attck.json”)
输出:

sub_name,name,id,sub_id
subtechnique0,technique1,0,0
subtechnique1,technique1,0,1
subtechnique2,technique1,0,2
subtechnique3,technique2,1,3
subtechnique4,technique2,1,4
[
{
“id”:“0”,
“名称”:“技术1”,
“子技术名称”:“子技术0”,
“子单元id”:“0”
},
{
“id”:“0”,
“名称”:“技术1”,
“子技术名称”:“子技术1”,
“子单元id”:“1”
},
{
“id”:“0”,
“名称”:“技术1”,
“子技术名称”:“子技术2”,
“子单元id”:“2”
},
{
“id”:“1”,
“名称”:“技术2”,
“子技术名称”:“子技术3”,
“子单元id”:“3”
},
{
“id”:“1”,
“名称”:“技术2”,
“子技术名称”:“子技术4”,
“子单元id”:“4”
}
]
csv:

#编写csv文件的函数
导入csv
def write_csv(数据,路径:str):
打开(路径“w”)作为文件:
#拿到所有的钥匙
fieldnames=set().union(*数据)
writer=csv.DictWriter(文件,字段名=字段名,
行终止符=“\n”)
writer.writeheader()
writer.writerows(数据)
写入csv(attck_flat'。/attck.csv')
输出:

sub_name,name,id,sub_id
subtechnique0,technique1,0,0
subtechnique1,technique1,0,1
subtechnique2,technique1,0,2
subtechnique3,technique2,1,3
subtechnique4,technique2,1,4