的json結果pipdeptree有形式:
[
{
"package": {
"key": "ansible-base",
"package_name": "ansible-base",
"installed_version": "2.10.8",
"required_version": "==2.10.8"
},
"dependencies": []
},
{
"package": {
"key": "botocore",
"package_name": "botocore",
"installed_version": "1.27.10",
"required_version": ">=1.12.36,<2.0a.0"
},
"dependencies": [
{
"key": "boto3",
"package_name": "boto3",
"installed_version": "1.24.10"
},
{
"key": "s3transfer",
"package_name": "s3transfer",
"installed_version": "0.6.0"
}
]
}
]
我想將其保存為帶有列的 csv:
package.key,package.package_name,package.installed_version,package.required_version,dependencies
并在dependencies列中僅列出鍵(因此對于第二個包,依賴項的值應該是boto3; s3transfer.
我試圖簡單地展平 json,pandas.normalize_json但它沒有正確處理依賴項陣列。最簡單的方法是什么?
uj5u.com熱心網友回復:
嘗試:
import pandas as pd
lst = [
{
"package": {
"key": "ansible-base",
"package_name": "ansible-base",
"installed_version": "2.10.8",
"required_version": "==2.10.8",
},
"dependencies": [],
},
{
"package": {
"key": "botocore",
"package_name": "botocore",
"installed_version": "1.27.10",
"required_version": ">=1.12.36,<2.0a.0",
},
"dependencies": [
{
"key": "boto3",
"package_name": "boto3",
"installed_version": "1.24.10",
},
{
"key": "s3transfer",
"package_name": "s3transfer",
"installed_version": "0.6.0",
},
],
},
]
out = []
for d in lst:
out.append({})
for k, v in d["package"].items():
out[-1][f"package.{k}"] = v
out[-1]["dependencies"] = "; ".join(v["key"] for v in d["dependencies"])
df = pd.DataFrame(out)
print(df)
df.to_csv("data.csv", index=False)
印刷:
package.key package.package_name package.installed_version package.required_version dependencies
0 ansible-base ansible-base 2.10.8 ==2.10.8
1 botocore botocore 1.27.10 >=1.12.36,<2.0a.0 boto3; s3transfer
并保存data.csv:
package.key,package.package_name,package.installed_version,package.required_version,dependencies
ansible-base,ansible-base,2.10.8,==2.10.8,
botocore,botocore,1.27.10,">=1.12.36,<2.0a.0",boto3; s3transfer
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/524030.html
上一篇:熊貓重新采樣插值行為很奇怪
