如何操作目录路径以跨多个操作系统工作?

2024-07-02 11:09:23 发布

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

我正在编写一个python脚本,它必须从输入路径内部创建输出路径。然而,我面临的问题是如何创建一条不受操作系统限制的路径

我尝试过使用os.path.join,但它有自己的局限性。 除此之外,我认为简单的字符串连接不是一个好办法。 Pathlib可以是一个选项,但我不允许使用它

import os
inputpath = "C:\projects\django\hereisinput"

lastSlash = left.rfind("\\")

# This won't work as os path join stops at a slash
outputDir = os.path.join(left[:lastSlash], "\internal\morelevel\outputpath")

OR

OutDir = left[:lastSlash] + "\internal\morelevel\outputpath"

预期输出路径: C:\projects\django\internal\morelevel\outputpath项目

另外,上面的代码并不是针对特定操作系统的,在Linux中,斜杠是不同的

os.sep()是一种选择吗


Tags: pathdjango字符串路径脚本osleftprojects
2条回答

假设原始路径为“C:\projects\django\hereisinput”,路径的另一部分为“internal\morelevel\outputpath”(请注意,这是一个相对路径,而不是绝对路径),则始终可以将主文件夹移回一个(或多个)文件夹,然后附加第二部分。请注意,第一条路径只需要包含文件夹,可以是绝对路径,也可以是相对路径,而第二条路径必须始终是相对路径,才能使此黑客程序正常工作

path_1 = r"C:\projects\django\hereisinput"
path_2 = r"internal\morelevel\outputpath"
path_1_one_folder_down = os.path.join(path_1, os.path.pardir)
final_path = os.path.join(path_1_one_folder_down, path_2)
'C:\\projects\\django\\hereisinput\\..\\internal\\morelevel\\outputpath'

从文档中os.path.join可以加入“一个或多个路径组件…”。因此您可以将"\internal\morelevel\outputpath"分解为它的每个组件,并将它们全部传递给os.path.join函数。这样就不需要对路径组件之间的分隔符进行“硬编码”。例如:

paths = ("internal", "morelevel", "outputpath")
outputDir = os.path.join(left[:lastSlash], *paths)

请记住,反斜杠(\)是Python中的一个特殊字符,因此包含单数反斜杠的字符串不会像您期望的那样工作!你需要用另一个在前面的\来逃离他们

这部分代码lastSlash = left.rfind("\\")也可能无法在任何操作系统上运行。您可以使用^{}之类的方法来获取所需路径的最后一部分。例如,_, lastSlash = os.path.split(left)

相关问题 更多 >