我一直在使用“查找”从根向下输出目录结构,我不介意这需要一段时间。我的问题是我想减少重复每个文件路径的冗余信息,我想以 JSON 格式输出文件。
我需要能够从终端运行它,我无法在盒子上创建 python 文件等。
例如,这个:
root
|_ fruits
|___ apple
|______images
|________ apple001.jpg
|________ apple002.jpg
|_ animals
|___ cat
|______images
|________ cat001.jpg
|________ cat002.jpg
会变成类似......
{"data" : [
{
"type": "folder",
"name": "animals",
"path": "/animals",
"children": [
{
"type": "folder",
"name": "cat",
"path": "/animals/cat",
"children": [
{
"type": "folder",
"name": "images",
"path": "/animals/cat/images",
"children": [
{
"type": "file",
"name": "cat001.jpg",
"path": "/animals/cat/images/cat001.jpg"
}, {
"type": "file",
"name": "cat001.jpg",
"path": "/animals/cat/images/cat002.jpg"
}
]
}
]
}
]
}
]}
答案1
这是一个快速的 Python 程序,它应该使用递归输出您想要的模式。应该可以在 Python 2 和 3 中工作(尽管我只在 2 上进行了测试)。第一个参数是要进入的目录,或者默认情况下,脚本将使用当前目录。
#!/usr/bin/env python
import os
import errno
def path_hierarchy(path):
hierarchy = {
'type': 'folder',
'name': os.path.basename(path),
'path': path,
}
try:
hierarchy['children'] = [
path_hierarchy(os.path.join(path, contents))
for contents in os.listdir(path)
]
except OSError as e:
if e.errno != errno.ENOTDIR:
raise
hierarchy['type'] = 'file'
return hierarchy
if __name__ == '__main__':
import json
import sys
try:
directory = sys.argv[1]
except IndexError:
directory = "."
print(json.dumps(path_hierarchy(directory), indent=2, sort_keys=True))