web-dev-qa-db-ja.com

ディレクトリツリーをJSONとして表す

そのようなJSONを生成する簡単な方法はありますか?私はos.walk()os.listdir()を見つけたので、ディレクトリに再帰的に下降してpythonオブジェクトを作成することもできますが、ホイールを再発明するように聞こえます、たぶん誰かがそのようなタスクの作業コードを知っていますか?

{
  "type": "directory",
  "name": "hello",
  "children": [
    {
      "type": "directory",
      "name": "world",
      "children": [
        {
          "type": "file",
          "name": "one.txt"
        },
        {
          "type": "file",
          "name": "two.txt"
        }
      ]
    },
    {
      "type": "file",
      "name": "README"
    }
  ]
}
20
Andrey Moiseev

このタスクは(いわば)「ホイール」ではないと思います。しかし、それはあなたが言及したツールを使用して簡単に達成できるものです:

import os
import json

def path_to_dict(path):
    d = {'name': os.path.basename(path)}
    if os.path.isdir(path):
        d['type'] = "directory"
        d['children'] = [path_to_dict(os.path.join(path,x)) for x in os.listdir\
(path)]
    else:
        d['type'] = "file"
    return d

print json.dumps(path_to_dict('.'))
30

Linuxでは、コマンドラインツール tree を使用できますが、デフォルトではインストールされていません 。出力は、OPが必要とする出力とほぼ同じで、JSON出力にフラグ-Jを使用します(これは、たとえばファイルにストリーミングすることができます)。

tree -J folder

OSXでは、このツールは Homebrew からインストールできます。