如何解析相对于任何目录的相对路径
How to resolve a relative path, relative to any directory
我知道如何将 '..\input\file\hello.txt'
之类的相对路径解析为相对于当前工作目录的绝对路径:
from pathlib import Path
rel_path = Path(r'..\input\file\hello.txt')
print(f'Absolute path: {rel_path.absolute()}'
当cwd
为C:\project\source\
时的输出:
C:\project\source\..\input\file\hello.txt
而且我还知道使用 .resolve()
来完全解析间接寻址:
from pathlib import Path
rel_path = Path(r'..\input\file\hello.txt')
print(f'Resolved path: {rel_path.resolve()}'
当cwd
为C:\project\source\
时的输出:
C:\project\input\file\hello.txt
如何在不更改当前工作目录(如果有的话)的情况下解析相对于任何路径的路径?甚至当我必须更改当前工作目录时,我如何才能完全解析一个实际上不存在的路径? (因为 .resolve()
仅适用于现有对象)
例如使用虚数get_relative_to()
:
get_relative_to(r'..\input\file\hello.txt', r'X:\bogus\folder')
理想情况下 return 'X:\bogus\input\file\hello.txt'
从3.6版开始resolve有参数strict
,当strict=False
路径不存在时也可以解析。在 3.8.0 中测试的示例:
from pathlib import Path
def get_relative_to(path1, path2):
return (path2 / path1).resolve(strict=False)
print(
get_relative_to(
Path(r'..\input\file\hello.txt'),
Path(r'X:\bogus\folder'),
)
)
# X:\bogus\input\file\hello.txt
我知道如何将 '..\input\file\hello.txt'
之类的相对路径解析为相对于当前工作目录的绝对路径:
from pathlib import Path
rel_path = Path(r'..\input\file\hello.txt')
print(f'Absolute path: {rel_path.absolute()}'
当cwd
为C:\project\source\
时的输出:
C:\project\source\..\input\file\hello.txt
而且我还知道使用 .resolve()
来完全解析间接寻址:
from pathlib import Path
rel_path = Path(r'..\input\file\hello.txt')
print(f'Resolved path: {rel_path.resolve()}'
当cwd
为C:\project\source\
时的输出:
C:\project\input\file\hello.txt
如何在不更改当前工作目录(如果有的话)的情况下解析相对于任何路径的路径?甚至当我必须更改当前工作目录时,我如何才能完全解析一个实际上不存在的路径? (因为 .resolve()
仅适用于现有对象)
例如使用虚数get_relative_to()
:
get_relative_to(r'..\input\file\hello.txt', r'X:\bogus\folder')
理想情况下 return 'X:\bogus\input\file\hello.txt'
从3.6版开始resolve有参数strict
,当strict=False
路径不存在时也可以解析。在 3.8.0 中测试的示例:
from pathlib import Path
def get_relative_to(path1, path2):
return (path2 / path1).resolve(strict=False)
print(
get_relative_to(
Path(r'..\input\file\hello.txt'),
Path(r'X:\bogus\folder'),
)
)
# X:\bogus\input\file\hello.txt