如何操纵目录路径以跨多个OS工作?

时间:2019-05-24 13:46:36

标签: python python-2.6

我正在编写一个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

此外,上面的代码也没有实现特定于OS的功能,在Linux中,斜杠会有所不同。

os.sep()是否有某些选择?

2 个答案:

答案 0 :(得分:1)

根据文档os.path.join,可以加入“ 一个或多个路径组件...”。因此,您可以将"\internal\morelevel\outputpath"拆分成每个组件,然后将它们全部传递给os.path.join函数。这样,您无需“硬编码”路径组件之间的分隔符。例如:

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

请记住,反斜杠(\)在Python中是一个特殊字符,因此您包含奇异反斜杠的字符串将无法正常工作!您需要在前面加上另一个\来逃避它们。

您的代码lastSlash = left.rfind("\\")的这一部分也可能不适用于任何操作系统。您宁愿使用os.path.split之类的东西来获取所需路径的最后一部分。例如,_, lastSlash = os.path.split(left)

答案 1 :(得分:0)

假设您的原始路径为“ 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'