我正在编写一个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()是否有某些选择?
答案 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'