使用pathlib实现与操作系统无关的相对路径

3

我有一个字符串变量dirname,其中包含带有正确斜杠(如果在Linux上则为“/”,如果在Windows上则为“\”)的路径。

我还有一个可能包含错误斜杠的相对文件名字符串。

如何使用pathlib将它们连接起来并获取在运行脚本的操作系统中的正确完整文件名?

例如,在Linux上运行:

dirname = '/users/myname/dir1'
filename1 = '..\\dir2\\file.txt'
filename2 = '../dir2/file.txt'

我希望将dirnamefilename1filename2连接起来,在两种情况下都获得/users/myname/dir2/file.txt。在Windows上运行:
dirname = 'C:\\dir1'
filename1 = '..\\dir2\\file.txt'
filename2 = '../dir2/file.txt'

我想要将dirnamefilename1filename2连接起来,在两种情况下都得到C:\\dir2\\file.txt


你尝试过使用 os.path.join 吗? - sahasrara62
@sahasrara62 使用os.path.join时,我需要将斜杠替换为当前操作系统所需的正确斜杠,是吗?我想要一个与操作系统无关的解决方案。 - user2052436
这个回答解决了你的问题吗?在Windows中使用Python绝对Unix路径 - sahasrara62
我感到困惑,你如何能够获得正确的 dirname 字符串,却不知道是否应该使用 filename1 还是 filename2 - AMC
@AMC dirname作为命令行参数出现,因此它始终与操作系统正确匹配,文件名列在输入文件中,该文件可能来自Windows侧。 - user2052436
1个回答

2

一个可能的解决方案是仅存储路径的组件:

import pathlib

path_1 = pathlib.Path(r"/users/myname/dir1")
print(path_1)

path_list = ["dir2", "file.txt"]

path_2 = pathlib.Path(*path_list)
print(path_2)

res = path_1.joinpath(path_2)
print(res)

输出:

/users/myname/dir1
dir2/file.txt
/users/myname/dir1/dir2/file.txt

不幸的是,这并不完美,似乎文件路径会变得非常混乱。例如,请参见在Python中跨平台拆分路径这个答案非常整洁。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接