2

いくつかのディレクトリ名を個々の変数として追跡するPythonスクリプトがあります。これらのディレクトリの一部は存在する可能性がありますが、他のディレクトリは実行時に作成する必要がある場合があります。

たとえば、このディレクトリツリーがある場合:

./top
     /a
       /a1
       /a2
     /b
       /b1
     /c

次に、現在、個々の変数を使用してすべてのディレクトリパス名を追跡しています。

top_path = os.path.join(os.curdir, 'top')
a_path = os.path.join(top_path, 'a')
# etc...

ただし、実際のOSディレクトリのサポートではないにしても、ディレクトリツリーを尊重する方法でそれらを整理すると便利です。

Pythonでディレクトリツリー(または変数のツリー)を管理する標準的な方法はありますか?または、すべてをネストされたリストまたはタプルに格納する必要がありますか、それとも独自のクラスを作成する必要がありますか?top.a.a1'./top/a/a1'を返すような優れたAPIを備えたものがあれば素晴らしいでしょう。

4

1 に答える 1

3

dict-of-dictsはどうですか?何かのようなもの:

tree = {
       'top': {
              'a': {
                   'path': a_pathvar,
                   'a1':
                   'a2':
               }
               'b': {
                    'path':  b_pathvar,
                }
         }
       }

a1次に、を使用してのパス変数に簡単にアクセスできますtree['top']['a']['a1']['path']。このツリー構造は、1行のコードで簡単に作成できます。

def tree(): return defaultdict(tree)

この構造の優れた特性は、パスを作成しようとする場合に中間キーが存在する必要がないことです。

tree['top']['a']['long']['tree']['path'] = path_var

これにより、中間キーが自動的に作成されます

このページでさらに詳しく説明します。

于 2012-05-10T05:37:16.500 に答える