我想知道是否有可能提供一个文件夹路径,并让python脚本扫描给定的文件夹并返回一个json树,其中包含每个文件夹的文件数量。该树应包含每个子文件夹:
例如结果:
[{
foldername: "folder1",
amount_of_files: 123,
children: [
{
foldername: "folder1.1",
amount_of_files: 3,
children: []
},
{
foldername: "folder1.2",
amount_of_files: 5,
children: [
{
foldername: "folder1.2.1",
amount_of_files: 20,
children: []
}
]
}
]
},
{
foldername: "folder2",
amount_of_files: 1,
children: [
{
foldername: "folder2.1",
amount_of_files: 3,
children: [
{
foldername: "folder2.1.1",
amount_of_files: 2,
children: [
{
foldername: "folder2.1.1.1",
amount_of_files: 24,
children: []
}
]
}
]
},
{
foldername: "folder1.2",
amount_of_files: 5,
children: []
}
]
}
]
您可以使用os.listdir
递归:
import os, json
def get_tree(path=os.getcwd()):
return {'foldername':path,
'amount_of_files':sum(not os.path.isdir(os.path.join(path, k)) for k in os.listdir(path)),
'children':[get_tree(os.path.join(path, k)) for k in os.listdir(path) if os.path.isdir(os.path.join(path, k))]}
with open('folder_tree.json', 'w') as f:
json.dump(get_tree(), f)
要生成字典列表,每个字典都包含文件夹名称和文件数,您可以使用递归生成器函数:
def get_tree(path=os.getcwd()):
yield {'foldername':path, 'amount_of_files':sum(not os.path.isdir(os.path.join(path, k)) for k in os.listdir(path))}
for i in os.listdir(path):
if os.path.isdir(os.path.join(path, i)):
yield from get_tree(os.path.join(path, i))
with open('folder_tree.json', 'w') as f:
json.dump(list(get_tree()), f)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句