ルートからディレクトリ構造を出力するためにFindを使用してきましたが、時間がかかるという点は気にしません。私の問題は、各ファイルパスを繰り返す重複情報を減らし、ファイルを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))