pythonを使ってディレクトリのツリー構造をjsonで表示してみた
何に使えるのかわかりませんが、ディレクトリのツリー構造をjsonで表現するプログラムを紹介します。
サンプルとして用意したティレクトリ構造が以下のものです。
dir/ ├── dir2 │ ├── file1 │ └── file2 └── dir3 └── dir4 ├── file3 └── file4
プログラム
jsonファイルを作成して保存するまで書こうと考えたのですが、printで表示してもいいかなと。
jsonが表示されれば良いのですし。
def file_tree(path='.'): dirs = os.listdir(path) buf_child = [] root = { 'path': path, 'name': '', 'child': buf_child, } for dir in dirs: dir_path = os.path.join(path, dir) if os.path.isdir(dir_path): # dirの場合 child = file_tree(dir_path) child['name'] = dir buf_child.append(child) else: # dir以外 buf_child.append({ 'path': dir_path, 'name': dir, 'child': [], }) return root if __name__ == '__main__': result = file_tree() print(json.dumps(result, indent=4))
再帰的に検索しています。
自分の実装があっていれば、深さ優先探索をしているはずです。
ディレクトリの場合は、もう一度検索して、ファイルのときはchildにデータを入れています。
モノがなくなったら、その結果をjsonにしてprintしてます。
実行結果
これをどうやって使うのか、何に使えるのか、まったく考えていません。
再帰的に検索するプログラムを突発的に作りたくなったのと、直近でtreeコマンドを使ってたのでなんとなく作ってみました。
きっと、このjsonをloadsで読み込んで、再帰的に表示するといい感じにコンソールに表示できるはずです。
{ "path": "./dir", "name": "", "child": [ { "path": "./dir/dir2", "name": "dir2", "child": [ { "path": "./dir/dir2/file1", "name": "file1", "child": [] }, { "path": "./dir/dir2/file2", "name": "file2", "child": [] } ] }, { "path": "./dir/dir3", "name": "dir3", "child": [ { "path": "./dir/dir3/dir4", "name": "dir4", "child": [ { "path": "./dir/dir3/dir4/file3", "name": "file3", "child": [] }, { "path": "./dir/dir3/dir4/file4", "name": "file4", "child": [] } ] } ] } ] }