【问题标题】:OS-agnostic relative path using pathlib使用 pathlib 的与操作系统无关的相对路径
【发布时间】:2020-04-15 20:00:03
【问题描述】:

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

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

我如何加入他们并为我正在运行脚本的操作系统获取正确的完整文件名,使用 pathlib?

例如在 Linux 上运行:

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

我想通过filename1filename2 加入dirname,并在这两种情况下都获得/users/myname/dir2/file.txt

在 Windows 上运行:

dirname = 'C:\\dir1'
filename1 = '..\\dir2\\file.txt'
filename2 = '../dir2/file.txt'

我想通过filename1filename2 加入dirname,并在这两种情况下都获得C:\\dir2\\file.txt

【问题讨论】:

  • 你试过os.path.join吗?
  • @sahasrara62 使用os.path.join,我需要为运行它的操作系统替换斜杠以获得正确的斜杠,不是吗?我想要独立于操作系统的解决方案。
  • 这能回答你的问题吗? Using absolute unix paths in windows with python
  • 我很困惑,你如何设法获得正确的dirname 字符串,但不知道你应该使用filename1 还是filename2
  • @AMC dirname 作为命令行参数出现,因此对于操作系统来说总是正确的,文件名列在输入文件中,可能来自 Windows 端

标签: python pathlib


【解决方案1】:

一个潜在的解决方案是只存储路径的组件:

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

不幸的是,这并不完美,文件路径似乎会变得非常混乱。参见例如cross-platform splitting of path in pythonThis answer 很整洁。

【讨论】:

    猜你喜欢
    • 2018-10-29
    • 2020-04-10
    • 2012-06-06
    • 2020-05-17
    • 1970-01-01
    • 2013-04-21
    • 2019-10-12
    • 2020-11-26
    • 2011-07-10
    相关资源
    最近更新 更多