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.Configurations matérielle et logicielle/4.1. Configuration matérielle de base/"
- "/4.Configurations matérielle et logicielle/4.2. Configuration Application/file1.txt"
- “/4.Configurations matérielle et logicielle/4.2. Configuration Application/file2.txt”
- "/5. 测试函数/5.1. Démarrage/"
- “/5. 测试函数/5.2.Réglages/file1.txt”
- “/5. 测试函数/5.2.Réglages/file2.txt”
所以一个...
我真的很感谢你的建议,因为我已经厌倦了每一个想法,但我没有得到我想要的。谢谢您的帮助。
解决方案
我将在这里解释一切:
- 验证列表中每个元素的第一个值是文件还是目录。
- 如果元素是文件,则使用您的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
推荐阅读
- reactjs - 在firebase中添加一个集合文档长度的计数器
- google-cloud-platform - 使用“Google Cloud Platform”部署管理器设置 LAMP,是否可以使用 Cloud Shell 进行编辑?
- r - 计算列表的相似度分数
- c++ - 通过移动 Slider 在 qt 中撤消 setPixel 操作
- ios - 无法在 UserDefaults 中存储自定义类 - 尝试插入非属性列表
- ssis - 事实表核对或验证
- reactjs - 如何将 create-react-app 用于带有 TypeScript 的 React 版本 16.xx?
- c# - 如何使用 .net 在 Amzon 中使用 sell-partner-api 加密和上传数据
- stripe-payments - Stripe webhook 以告知订阅何时失效
- java - 带有子域的 Spring (Test)RestTemplate 抛出 UnknownHostException