首页 > 解决方案 > 如何从列表中创建路径文件夹

问题描述

我有一个列表,其中包含带有段落编号的文件夹名称(从带有 pydocx 的 word 文件中提取)

list = [
"1. Références",
"2. Identification de l’équipement sous test",
"3. Moyens de test",
"4. Configurations matérielle et logicielle",
"4.1. Configuration matérielle de base",
"4.2. Configuration Application",
"file1.txt",
"file2.txt",
"5. Tests fonctionnels",
"5.1. Démarrage",
"5.2. Réglages",
"file1.txt",
"file2.txt",
"file3.txt",
"5.3. Signalisation",
"file1.txt",
"file2.txt",
"file3.txt",
"file4.txt",
"5.3.1. LED Focus",
"file1.txt",
"file2.txt",
"file3.txt",
"file4.txt",
"file5.txt",
"5.3.2. LED Verrou",
"5.3.3. LED Apprentissage",
"5.3.4. LED Fin de course",
"5.3.5. LED Défaut",
"5.3.6. LED Fonctionnement",
"5.3.7. Buzzer",
"5.4. Bornier Commande",
"5.4.1. Sans fonction",
"5.4.1.1. Entrée E1",
"5.4.1.2. Entrée E2",
.
.
.
] 

我想将这些元素转换为路径目录,以创建树文件夹。例如:我想要这样的文件夹目录:

所以一个...

我真的很感谢你的建议,因为我已经厌倦了每一个想法,但我没有得到我想要的。谢谢您的帮助。

标签: pythonpython-3.x

解决方案


我将在这里解释一切:

  • 验证列表中每个元素的第一个值是文件还是目录。
  • 如果元素是文件,则使用您的parentStack将其添加到您的路径文件夹中。我为此使用了一个元(Number of the directory, Complete name of the directory, If the directory it is in your path list of not),例如("5.5.", "5.5. Directory Example", False)
  • 如果parentStack为空并且您的元素是一个目录,则将其添加到您的堆栈中。
  • 如果您的堆栈不为空,请检查堆栈的最后一个元素是否是当前元素的父目录。如果它是父级,则将其添加到您的堆栈中。如果没有,请删除最后一个元素并检查该元素是否已添加到您的路径列表中

有代码:

import re
paths = []
parentStack = []

def addPath(value, isDirectory):
    path = ""
    for i in range(len(parentStack)):
        path += "/" + parentStack[i][1] # Complete name folder
        parentStack[i] = (parentStack[i][0], parentStack[i][1], True)
    path += "/" + value
    if isDirectory:
        path += "/"
    paths.append(path)

def returnPaths(list):
    for elem in list:
        value = elem.split(" ")[0] # Taking the number directory
        if re.match("([0-9]+\.)+", value) == None:
            addPath(elem, False)
        else:
            if not parentStack:
                parentStack.append((value, elem, False)) 
            else:
                added = False
                while parentStack:
                    isSon = True
                    parent = parentStack[-1][0] # I'm taking the number of the directory here

                    for i in range(len(parent)):
                        if (len(value) > i and parent[i] != value[i]):
                            folder = parentStack.pop()
                            isSon = False
                            if not folder[2]:
                                addPath(folder[1], True)
                            break

                    if isSon:
                        added = True
                        parentStack.append((value, elem, False))
                        break
                if not added:
                    parentStack.append((value, elem, False))
    return paths

推荐阅读