可以os.步行()是否用于字符串列表?如果不是,那么等价物是什么?

2024-04-25 14:26:27 发布

您现在位置:Python中文网/ 问答频道 /正文

不使用真正的文件结构,是否可以给它一个预先制作的字符串列表,让它为您创建一个嵌套的路径/文件列表?你知道吗

示例列表(格式化为可读):

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

我问了一个类似的问题:How would I nest file path strings into a list based upon matching folder paths in Python

我得到一条评论说os.walk()将是我想要的理想选择,但无论我看到哪里,人们似乎都在使用它来爬网文件系统,而不是向它传递一个已经创建的文件路径列表。你知道吗


Tags: 文件路径txt列表random结构jpgblah
1条回答
网友
1楼 · 发布于 2024-04-25 14:26:27

只需创建一棵树。演示示例的快速草稿:

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': {}}}

如果可以用dicts代替list,那么很容易改变。你知道吗

相关问题 更多 >