【问题标题】:Split different path structures generic - Python拆分不同的路径结构通用 - Python
【发布时间】:2021-07-26 14:16:17
【问题描述】:

一开始我的路径总是相同的结构:projectnumber/moduleXY/src/test.py,我总是像这样拆分模块:

splitted_path = project_path.split(os.sep) 
module = splitted_path[1]

现在我必须通用,因为我不知道我的路径的维度。而且我的一些路径没有任何模块,所以我想再举一个例子

例如:

projectnumber/ID/TestCASE/doc/documentation.txt--> save TestCase 
projectnumber/module1/spec/req.rst-> save module1
newProjectname/ID/Product/doc/documentation.txt-> save Product

我真的不知道该怎么做,因为我不能再使用splitted_path[1],因为我不知道模块、组件或产品是否在数组的[1] 位置。

你有什么想法吗?

【问题讨论】:

  • ID 的结构是什么?你能分享一些例子吗?
  • 您的示例中的模式是否详尽?例如,这些是出现在您的路径中的唯一模式吗?在您显示的示例中-模块名称为[1][2]-取决于ID 的存在,如果您能告诉我们这个ID 的样子-可能会有所帮助寻找逻辑识别模式。
  • @azro ID 只是示例我不知道未来项目的结构:/ 所以我必须至少保存一个有意义的模块名或组件名。就像在示例中一样
  • @Chase 不,它们只是路径的示例。在不知道路径尺寸的情况下,我很难做到通用
  • 如果你不知道模块在哪个地方,那么代码也不会知道。您必须弄清楚 YOU 如何识别路径中的模块 - 如果不是通过位置,那么可能通过下一个/上一个元素(即 ID 之后的第一个元素)或者可能通过名称中的某些单词(带有单词的字典) .但是,如果这没有帮助并且您不知道未来的结构,那么您将无法创建解决方案。你只是要求魔法(甚至人工智能也可能无济于事)。

标签: python python-3.x path


【解决方案1】:

你也可以从右到左索引,例如:

project_path = "projectnumber/ID/TestCASE/doc/documentation.txt"
splitted = project_path.split(os.sep) 
module = splitted[-3]

在这种情况下相当于:

module = splitted[2]

或者你也可以使用pathlib

from pathlib import Path

path = Path("projectnumber/ID/TestCASE/doc/documentation.txt")

module_path = path.parent.parent.name

# path.parent -> Path("projectnumber/ID/TestCASE/doc")
# path.parent.parent -> Path("projectnumber/ID/TestCASE")
# path.parent.parent.name -> "TestCASE"

【讨论】:

  • 感谢您的回答,但是如果您不知道路径结构,那么拆分 [-3] 是否没有那么危险?并且将被保护的变量不应该是 src 或 doc 之类的东西,它必须是独一无二的,因为我将创建/打开一个具有此名称的文件。如果路径看起来像这个 project_name/modulexy/tests/doc/doc.txt 并且我想要 modulexy 怎么办?只是一个例子,因为我真的必须做通用但我知道如何
  • 我已询问有关路径的更多详细信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
  • 2023-01-18
  • 2011-05-24
  • 2014-01-23
  • 1970-01-01
  • 2016-07-16
相关资源
最近更新 更多