![](/img/trans.png)
[英]How do I write a csv file from a dictionary with multiple values per key?
[英]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.