2017-02-03 9 views
0

実際のファイル構造を使用する代わりに、パス/ファイルのネストされたリストを作成するための完全な文字列リストを与えることは可能ですか?文字列のリストでos.walk()を使用できますか?もしそうでなければ、同等のものは何でしょうか?

例一覧(それは読みやすいですので、フォーマット済み):私はここに同様の質問をし

['user'['1.jpg','hey.jpg','folder1'['1.txt','blah.txt','folder2'['random.txt']],'folder3'['folder4'['folder5'['1.txt','2.txt','3.txt']]]]]

:ここ

files = [ 
    'user/hey.jpg', 
    'user/folder1/1.txt', 
    'user/folder1/folder2/random.txt', 
    'user/folder1/blah.txt', 
    'user/folder3/folder4/folder5/1.txt', 
    'user/folder3/folder4/folder5/3.txt', 
    'user/folder3/folder4/folder5/2.txt', 
    'user/1.jpg' 
    ] 

は、私は願って出力されHow would I nest file path strings into a list based upon matching folder paths in Python

私は、os.walk()が私が望んでいたものに理想的だと言っているコメントを持っていましたが、どこでも見ています。既に作成されたファイルパスのリストを渡すのではなく、ファイルシステムをクロールするのに使用します。

答えて

1

ただツリーを作成してください。それはとにかく変更するのは簡単dicts代わりのリストを、持っているすべての権利だ場合

{'user': {'1.jpg': {}, 
      'folder1': {'1.txt': {}, 
         'blah.txt': {}, 
         'folder2': {'random.txt': {}}}, 
      'folder3': {'folder4': {'folder5': {'1.txt': {}, 
               '2.txt': {}, 
               '3.txt': {}}}}, 
      'hey.jpg': {}}} 

import pprint 

files = [ 
    'user/hey.jpg', 
    'user/folder1/1.txt', 
    'user/folder1/folder2/random.txt', 
    'user/folder1/blah.txt', 
    'user/folder3/folder4/folder5/1.txt', 
    'user/folder3/folder4/folder5/3.txt', 
    'user/folder3/folder4/folder5/2.txt', 
    'user/1.jpg' 
    ] 

def append_to_tree(node, c): 
    if not c: 
     return 

    if c[0] not in node: 
     node[c[0]] = {} 

    append_to_tree(node[c[0]], c[1:]) 

root = {} 
for path in files: 
    append_to_tree(root, path.split('/')) 

pprint.pprint(root) 

出力:クイックドラフトでは、一例を示します。

+0

@Bakuriu私はコードブロックを使用することができます。問題は、プログラムの出力はコードではないため、quoteブロックを使用する必要があるということです。 – BartoszKP

+0

ナー、バクリーがそうだった。 –

+0

文字列で解釈されるすべてのテキストにコードブロックを使用する必要があります。正確な内容が不可欠であるため、トレースバックやエラーメッセージ、プログラム入出力などがあります。さらに、あなたのロジックプログラムの出力に従えば、引用ブロックで意図されているように*他の誰かの**引用符**ではありません。 – Bakuriu

関連する問題