下面的代码将不会连接,在调试时,命令不存储整个路径,而只存储最后一个条目。
os.path.join('/home/build/test/sandboxes/', todaystr, '/new_sandbox/')
当我测试这个时,它只存储/new_sandbox/部分的代码。
下面的代码将不会连接,在调试时,命令不存储整个路径,而只存储最后一个条目。
os.path.join('/home/build/test/sandboxes/', todaystr, '/new_sandbox/')
当我测试这个时,它只存储/new_sandbox/部分的代码。
当前回答
os.path.join("a", *"/b".split(os.sep))
'a/b'
更完整的版本:
import os
def join (p, f, sep = os.sep):
f = os.path.normpath(f)
if p == "":
return (f);
else:
p = os.path.normpath(p)
return (os.path.join(p, *f.split(os.sep)))
def test (p, f, sep = os.sep):
print("os.path.join({}, {}) => {}".format(p, f, os.path.join(p, f)))
print(" join({}, {}) => {}".format(p, f, join(p, f, sep)))
if __name__ == "__main__":
# /a/b/c for all
test("\\a\\b", "\\c", "\\") # optionally pass in the sep you are using locally
test("/a/b", "/c", "/")
test("/a/b", "c")
test("/a/b/", "c")
test("", "/c")
test("", "c")
其他回答
后面的字符串不应该以斜杠开头。如果它们以斜杠开头,那么它们被认为是“绝对路径”,之前的所有内容都将被丢弃。
引用Python文档中的os.path.join:
如果一个组件是一个绝对路径,那么之前的所有组件都将被丢弃,连接将继续从绝对路径组件开始。
注意,在Windows上,与驱动器号相关的行为,与早期的Python版本相比,似乎已经发生了变化:
在Windows上,当遇到绝对路径组件(例如r'\foo')时,驱动器号不会重置。如果组件中包含驱动器号,则丢弃之前的所有组件并重置驱动器号。注意,由于每个驱动器都有一个当前目录,os.path。join("c:", "foo")表示相对于c盘(c:foo)上当前目录的路径,而不是c:\foo。
os.path.join()的思想是让你的程序跨平台(linux/windows/etc)。
一刀就毁了它。
所以它只有在与某种参考点一起使用时才有意义 操作系统。environ['HOME']或os.path.dirname(__file__)。
os.path.join("a", *"/b".split(os.sep))
'a/b'
更完整的版本:
import os
def join (p, f, sep = os.sep):
f = os.path.normpath(f)
if p == "":
return (f);
else:
p = os.path.normpath(p)
return (os.path.join(p, *f.split(os.sep)))
def test (p, f, sep = os.sep):
print("os.path.join({}, {}) => {}".format(p, f, os.path.join(p, f)))
print(" join({}, {}) => {}".format(p, f, join(p, f, sep)))
if __name__ == "__main__":
# /a/b/c for all
test("\\a\\b", "\\c", "\\") # optionally pass in the sep you are using locally
test("/a/b", "/c", "/")
test("/a/b", "c")
test("/a/b/", "c")
test("", "/c")
test("", "c")
这是因为'/new_sandbox/'以/开头,因此被认为是相对于根目录的。去掉前导的/。
请参考下面的代码片段来理解os.path。加入(a, b)
a = '/home/user.name/foo/'
b = '/bar/file_name.extension'
print(os.path.join(a, b))
>>> /bar/file_name.extension
OR
a = '/home/user.name/foo'
b = '/bar/file_name.extension'
print(os.path.join(a, b))
>>> /bar/file_name.extension
但是,当
a = '/home/user.name/foo/'
b = 'bar/file_name.extension'
print(os.path.join(a, b))
>>> /bar/file_name.extension
OR
a = '/home/user.name/foo'
b = 'bar/file_name.extension'
print(os.path.join(a, b))
>>> /home/user.name/foo/bar/file_name.extension