簡體   English   中英

我有一本字典,其中的值本身也是一本字典——如何將值寫入 CSV,值中的鍵是列名?

[英]I have a dictionary & the values are also a dictionary itself- how do I write the values to a CSV, with the key in the values being the column name?

寫出來有點混亂,但用我的代碼看會更容易。我不確定我的標題是否准確描述了我的問題,我是個新手,我正在努力解決這個問題。

main.py(第 1 部分)

new_dict = {}
for ip, host, os, vuln_title, vuln_id, cvss2, cvss3, descr, proof, solu, cves in data[1:]:
    vuln_data = new_dict.setdefault(vuln_id, {"Vulnerability ID": vuln_id, "Name": host, "Affected IP Address": [], "Risk Exposure": cvss3})
    vuln_data["Affected IP Address"].append(ip)

print(new_dict)

Output

{
'202845': {'Vulnerability ID': '202845', 'Name': 'dsm1', 'Affected IP Address': ['10.0.7.2', '10.0.8.1'], 'Risk Exposure': '5.30000019'}, 
'149055': {'Vulnerability ID': '149055', 'Name': 'bitbucket', 'Affected IP Address': ['10.0.6.4', '10.0.5.9'], 'Risk Exposure': '7.5'}, 
'201637': {'Vulnerability ID': '201637', 'Name': 'logstash1', 'Affected IP Address': ['10.0.9.12', '10.0.7.24', '10.0.8.5'], 'Risk Exposure': '7.80000019'}, 
'151610': {'Vulnerability ID': '151610', 'Name': 'bitbucket2', 'Affected IP Address': ['10.0.6.7', '10.0.5.4'], 'Risk Exposure': '5.30000019'}
    }

當我跑

vuln_data = new_dict.setdefault(vuln_id, {"漏洞ID": vuln_id, "名稱": host, "受影響IP 地址": [], "風險暴露": cvss3})

它顯然將密鑰設置為我不想設置的vuln_id ,我想要鍵值對,我只是不想也將vuln_id放在前面。 下面這個output才是我真正需要的:

main.py(第 2 部分)

new_list = new_dict.values()
print(new_list)

Output

[
{'Vulnerability ID': '202845', 'Name': 'dsm1', 'Affected IP Address': ['10.0.7.2', '10.0.8.1'], 'Risk Exposure': '5.30000019'},
{'Vulnerability ID': '149055', 'Name': 'bitbucket', 'Affected IP Address': ['10.0.6.4', '10.0.5.9'], 'Risk Exposure': '7.5'}, '201637': 
{'Vulnerability ID': '201637', 'Name': 'logstash1', 'Affected IP Address': ['10.0.9.12', '10.0.7.24', '10.0.8.5'], 'Risk Exposure': '7.80000019'},
{'Vulnerability ID': '151610', 'Name': 'bitbucket2', 'Affected IP Address': ['10.0.6.7', '10.0.5.4'], 'Risk Exposure': '5.30000019'}
]

現在我有了這些詞典的列表,這是我需要的所有相關信息,但是當我嘗試將所有這些寫入 CSV 文件時遇到錯誤,如下所示:

main.py(第 3 部分)

keys = new_list[0].keys()

with open('output.csv', 'w', newline='') as output_file:
    dict_writer = csv.DictWriter(output_file, keys)
    dict_writer.writeheader()
    dict_writer.writerows(new_list)

錯誤

line 16, in <module>
    keys = new_list[0].keys()
TypeError: 'dict_values' object is not subscriptable

我真的不確定如何讓它正常工作——但我只想寫入一個 cdv 文件,其中的鍵作為列名/標題(即漏洞 ID、名稱等)和要獲取的值寫成一行

我只是提一下我的方法。

l = [
{'Vulnerability ID': '202845', 'Name': 'dsm1', 'Affected IP Address': ['10.0.7.2', '10.0.8.1'], 'Risk Exposure': '5.30000019'},
{'Vulnerability ID': '149055', 'Name': 'bitbucket', 'Affected IP Address': ['10.0.6.4', '10.0.5.9'], 'Risk Exposure': '7.5'},
{'Vulnerability ID': '201637', 'Name': 'logstash1', 'Affected IP Address': ['10.0.9.12', '10.0.7.24', '10.0.8.5'], 'Risk Exposure': '7.80000019'},
{'Vulnerability ID': '151610', 'Name': 'bitbucket2', 'Affected IP Address': ['10.0.6.7', '10.0.5.4'], 'Risk Exposure': '5.30000019'}
]

import pandas as pd
df=pd.DataFrame(l)
print(df)
df.to_csv("outputs.csv", index=False)

output 列名作為鍵

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM