簡體   English   中英

可以在字符串列表上使用os.walk()嗎? 如果沒有,那將是什么?

[英]Can os.walk() be used on a list of strings? If not, what would be the equivalent?

除了使用真實的文件結構之外,是否可以給它提供預制的字符串列表以使其為您創建路徑/文件的嵌套列表?

示例列表(格式便於閱讀):

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'
    ]

這是我希望的輸出:

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

我在這里問了類似的問題: 如何根據Python中匹配的文件夾路徑將文件路徑字符串嵌套到列表中

我收到一條評論,說os.walk()我的需求,但隨處可見,似乎人們在使用它來爬網文件系統,而不是將已創建的文件路徑列表傳遞給它。

只需創建一棵樹。 快速草稿顯示示例:

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)

輸出:

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

如果可以使用字典而不是列表,那么無論如何都可以輕松更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM