如何从列表中创建路径文件夹

2024-09-29 21:25:00 发布

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

我有一个列表,其中包含带有段落编号的文件夹名称(使用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",
.
.
.
] 

我想将这些元素转换为路径目录,以便创建树文件夹。 例如: 我希望有如下文件夹目录:

  • “/4.configurationmatérielle et logiciele/4.1.configurationmatérielle de base/”
  • “/4.2.配置材料和逻辑工具/4.2.配置 Application/file1.txt“
  • “/4.2.配置材料和逻辑工具/4.2.配置 Application/file2.txt“
  • “/5.测试基金会/5.1.结婚/
  • “/5.Tests-fonctionnels/5.2.Réglages/file1.txt”
  • “/5.Tests-fonctionnels/5.2.Réglages/file2.txt”

所以有一个

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


Tags: testtxt文件夹ledapplicationtestsdefile1
1条回答
网友
1楼 · 发布于 2024-09-29 21:25:00

我会在这里解释一切:

  • 验证列表中每个元素的第一个值是文件还是目录
  • 如果元素是文件,请使用父堆栈将其添加到路径文件夹中。我使用了一个元组(目录编号,目录全名,如果它不在您的路径列表中),例如,(“5.5.”,“5.5.目录示例”,False)
  • 如果父堆栈为空且元素为目录,则将其添加到堆栈中
  • 如果堆栈不是空的,请检查堆栈的最后一个元素是否是当前元素的父目录。如果是父对象,则将其添加到堆栈中。如果没有,请删除最后一个元素,并检查该元素是否已添加到路径列表中

代码如下:

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

相关问题 更多 >

    热门问题