如何在Python中加入两个绝对路径?
e.g。
path1 = 'C:/folder1/folder2/'
path2 = 'D:/directory1/directory2/'
所需的结果是:C:/folder1/folder2/directory1/directory2/
我尝试了os.path.join
但它忽略了第一条路径,因为它检测到它是一条绝对路径。那么在Python中加入这样的路径的最佳方式是什么?
谢谢!
答案 0 :(得分:3)
在Windows上,我会将os.path.splitdrive
与分隔符的条带结合使用
import os
path1 = 'C:/folder1/folder2/'
path2 = 'D:/directory1/directory2/'
seps = os.sep+os.altsep if os.altsep else os.sep
path3 = os.path.join(path1,os.path.splitdrive(path2)[1].lstrip(seps)) # handles / and \ as separators on windows
print(path3)
结果:
C:/folder1/folder2/directory1/directory2/
(如果第二条路径是相对路径,它也有效)
seps = os.sep+os.altsep if os.altsep else os.sep
行允许与没有备用分隔符的系统(Linux)兼容。此解决方案适用于Windows& Linux,os.splitdrive
是Linux上的虚拟对象(返回带有第一个空元素的元组)
答案 1 :(得分:3)
使用pathlib
module使第二条路径相对并与第一条路径连接:
Unhandled promise rejection
TypeError
columnNumber: 7
fileName: "http://localhost:8080/app.js line 1065 > eval"
lineNumber: 57
message: "parsed is undefined"
stack: "isURLSameOrigin@webpack-internal:///./node_modules/axios/lib/helpers/isURLSameOrigin.js:57:7\ndispatchXhrRequest@webpack-internal:///./node_modules/axios/lib/adapters/xhr.js:109:50\nPromise@webpack-internal:///./node_modules/core-js/modules/es6.promise.js:177:7\nxhrAdapter@webpack-internal:///./node_modules/axios/lib/adapters/xhr.js:12:10\ndispatchRequest@webpack-internal:///./node_modules/axios/lib/core/dispatchRequest.js:59:10\nrun@webpack-internal:///./node_modules/core-js/modules/es6.promise.js:75:22\nnotify/<@webpack-internal:///./node_modules/core-js/modules/es6.promise.js:92:30\nflush@webpack-internal:///./node_modules/core-js/modules/_microtask.js:18:9\n"
__proto__: Object { stack: "", … }
为了想象发生了什么,让我们看看一些中间输出。
Path.anchor
为您提供绝对路径的驱动器号(或Linux上的from pathlib import Path
path1 = Path('C:/folder1/folder2/')
path2 = Path('D:/directory1/directory2/')
path3 = path1 / path2.relative_to(path2.anchor)
# result: C:\folder1\folder2\directory1\directory2
)。如果路径是相对路径,则返回空字符串:
/
我们可以将此Path.relative_to
用于将>>> path2.anchor
'D:\\'
>>> Path('foo').anchor
''
转换为相对路径。如果它已经是相对的,它将不会受到此操作的影响:
path2
最后,既然我们有一个相对路径,那么它可以与>>> path2.relative_to(path2.anchor)
WindowsPath('directory1/directory2')
>>> Path('foo').relative_to('')
WindowsPath('foo')
运算符轻松地结合在一起。