加入两条绝对路径?

时间:2018-06-13 20:49:34

标签: python

如何在Python中加入两个绝对路径?

e.g。

path1 = 'C:/folder1/folder2/'
path2 = 'D:/directory1/directory2/'

所需的结果是:C:/folder1/folder2/directory1/directory2/

我尝试了os.path.join但它忽略了第一条路径,因为它检测到它是一条绝对路径。那么在Python中加入这样的路径的最佳方式是什么?

谢谢!

2 个答案:

答案 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') 运算符轻松地结合在一起。