下面的代码将不会连接,在调试时,命令不存储整个路径,而只存储最后一个条目。
os.path.join('/home/build/test/sandboxes/', todaystr, '/new_sandbox/')
当我测试这个时,它只存储/new_sandbox/部分的代码。
下面的代码将不会连接,在调试时,命令不存储整个路径,而只存储最后一个条目。
os.path.join('/home/build/test/sandboxes/', todaystr, '/new_sandbox/')
当我测试这个时,它只存储/new_sandbox/部分的代码。
当前回答
对于已有连接的字符串,尝试split("/")和*的组合。
import os
home = '/home/build/test/sandboxes/'
todaystr = '042118'
new = '/new_sandbox/'
os.path.join(*home.split("/"), todaystr, *new.split("/"))
它是如何工作的…
Split("/")将现有路径转换为列表:[",'home', 'build', 'test', 'sandboxes', "]
*在列表前面列出列表的每一项自己的参数
其他回答
对于已有连接的字符串,尝试split("/")和*的组合。
import os
home = '/home/build/test/sandboxes/'
todaystr = '042118'
new = '/new_sandbox/'
os.path.join(*home.split("/"), todaystr, *new.split("/"))
它是如何工作的…
Split("/")将现有路径转换为列表:[",'home', 'build', 'test', 'sandboxes', "]
*在列表前面列出列表的每一项自己的参数
os.path.join()的思想是让你的程序跨平台(linux/windows/etc)。
一刀就毁了它。
所以它只有在与某种参考点一起使用时才有意义 操作系统。environ['HOME']或os.path.dirname(__file__)。
像这样,去掉多余的斜杠
root="/home"
os.path.join(root,"build","test","sandboxes",todaystr,"new_sandbox")
为了让你的函数更可移植,可以这样使用它:
os.path.join(os.sep, 'home', 'build', 'test', 'sandboxes', todaystr, 'new_sandbox')
or
os.path.join(os.environ.get("HOME"), 'test', 'sandboxes', todaystr, 'new_sandbox')
为了帮助理解为什么这种令人惊讶的行为并不完全可怕,考虑一个接受配置文件名作为参数的应用程序:
config_root = "/etc/myapp.conf/"
file_name = os.path.join(config_root, sys.argv[1])
如果应用程序以以下方式执行:
$ myapp foo.conf
将使用配置文件/etc/myapp.conf/foo.conf。
但是考虑一下如果应用程序被调用时会发生什么:
$ myapp /some/path/bar.conf
然后myapp应该使用/some/path/bar.conf的配置文件(而不是/etc/myapp.conf/some/path/bar.conf或类似文件)。
这可能不是很好,但我相信这是绝对路径行为的动机。