我有一個包含所有檔案路徑的串列變數。前任:
f_list=[
"folder1 /folder1.1/images/image1.png",
"folder1 /folder1.1/images/image2.png",
"folder1 /folder1.1/images/image5.png",
"folder1 /folder1.3/Invoice_1.pdf",
"folder1 /folder1.3/Invoice_2.pdf",
"folder1 /folder1.3/Invoice_3.pdf",
"folder1 /folder1.3/Invoice_4.pdf",
"folder1 /folder1.3/Invoice_5.pdf"
]
我正在嘗試從上面的串列中生成字典,例如:
{
"object_name":"",
"object_type":"folder",
"object_path":"",
"object_count":8,
"object_list":[
{
"object_path":"folder1 /folder1.1/images",
"object_type":"folder",
"object_count":3,
"object_list":[
{
"object_path":"folder1 /folder1.1/images/image1.png",
"object_name":"image1.png",
"object_type":"file"
},
{
"object_path":"folder1 /folder1.1/images/image2.png",
"object_name":"image2.png",
"object_type":"file"
},
{
"object_path":"folder1 /folder1.1/images/image5.png",
"object_name":"image5.png",
"object_type":"file"
}
]
},
{
"object_path":"folder1 /folder1.3",
"object_type":"folder",
"object_count":5,
"object_list":[
{
"object_path":"folder1 /folder1.3/Invoice_1.pdf",
"object_name":"Invoice_1.pdf",
"object_type":"file"
},
{
"object_path":"folder1 /folder1.3/Invoice_2.pdf",
"object_name":"Invoice_2.pdf",
"object_type":"file"
},
{
"object_path":"folder1 /folder1.3/Invoice_3.pdf",
"object_name":"Invoice_3.pdf",
"object_type":"file"
},
{
"object_path":"folder1 /folder1.3/Invoice_4.pdf",
"object_name":"Invoice_4.pdf",
"object_type":"file"
},
{
"object_path":"folder1 /folder1.3/Invoice_5.pdf",
"object_name":"Invoice_5.pdf",
"object_type":"file"
}
]
}
]
}
有沒有可用于這種情況的圖書館?我仍在嘗試以這種格式獲取輸出。一旦我實作它,我將發布代碼片段。
也有人可以建議實作這一目標的方法嗎
提前致謝!。
uj5u.com熱心網友回復:
您可以使用以路徑為鍵的輔助字典來記住您創建的節點,以便您可以將一個子項放入父項的子項串列中。
這是一些代碼:
def maketree(lst):
mapper = {}
for path in lst:
parent = None
for key in (path[:i] for i, c in enumerate(path) if i == 0 or c == "/"):
if key not in mapper:
node = {
"object_type": "folder",
"object_path": key,
"object_count": 0,
"object_list": []
}
mapper[key] = node
if key:
mapper[parent]["object_list"].append(node)
mapper[key]["object_count"] = 1
parent = key
node = {
"object_type": "file",
"object_path": path,
"object_name": path[(len(key) or -1) 1:]
}
mapper[path] = node
mapper[parent]["object_list"].append(node)
return mapper[""]
您可以按如下方式使用它:
# Example run
f_list = [
"folder1 /folder1.1/images/image1.png",
"folder1 /folder1.1/images/image2.png",
"folder1 /folder1.1/images/image5.png",
"folder1 /folder1.3/Invoice_1.pdf",
"folder1 /folder1.3/Invoice_2.pdf",
"folder1 /folder1.3/Invoice_3.pdf",
"folder1 /folder1.3/Invoice_4.pdf",
"folder1 /folder1.3/Invoice_5.pdf"
]
tree = maketree(f_list)
# Pretty print the tree
import json
print(json.dumps(tree, indent=2))
這將產生比您在問題中擁有的更多的級別,因為還會為folder1 和創造一個級別folder1 /folder1.1。我認為這更一致:
{
"object_type": "folder",
"object_path": "",
"object_count": 8,
"object_list": [
{
"object_type": "folder",
"object_path": "folder1 ",
"object_count": 8,
"object_list": [
{
"object_type": "folder",
"object_path": "folder1 /folder1.1",
"object_count": 3,
"object_list": [
{
"object_type": "folder",
"object_path": "folder1 /folder1.1/images",
"object_count": 3,
"object_list": [
{
"object_type": "file",
"object_path": "folder1 /folder1.1/images/image1.png",
"object_name": "image1.png"
},
{
"object_type": "file",
"object_path": "folder1 /folder1.1/images/image2.png",
"object_name": "image2.png"
},
{
"object_type": "file",
"object_path": "folder1 /folder1.1/images/image5.png",
"object_name": "image5.png"
}
]
}
]
},
{
"object_type": "folder",
"object_path": "folder1 /folder1.3",
"object_count": 5,
"object_list": [
{
"object_type": "file",
"object_path": "folder1 /folder1.3/Invoice_1.pdf",
"object_name": "Invoice_1.pdf"
},
{
"object_type": "file",
"object_path": "folder1 /folder1.3/Invoice_2.pdf",
"object_name": "Invoice_2.pdf"
},
{
"object_type": "file",
"object_path": "folder1 /folder1.3/Invoice_3.pdf",
"object_name": "Invoice_3.pdf"
},
{
"object_type": "file",
"object_path": "folder1 /folder1.3/Invoice_4.pdf",
"object_name": "Invoice_4.pdf"
},
{
"object_type": "file",
"object_path": "folder1 /folder1.3/Invoice_5.pdf",
"object_name": "Invoice_5.pdf"
}
]
}
]
}
]
}
uj5u.com熱心網友回復:
https://gist.github.com/RameshPonnusami/a9ae7893f0ff51914f3c4a3c1abc5b6f.js
看看這個代碼片段。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/352456.html
