下面的代码将不会连接,在调试时,命令不存储整个路径,而只存储最后一个条目。
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()可以与os.path.sep一起使用来创建一个绝对路径,而不是相对路径。
os.path.join(os.path.sep, 'home','build','test','sandboxes',todaystr,'new_sandbox')
其他回答
请注意,如果使用os.path.join()来包含一个已经包含一个点的扩展,就会出现类似的问题,这是在使用os.path.splitext()时自动发生的情况。在这个例子中:
components = os.path.splitext(filename)
prefix = components[0]
extension = components[1]
return os.path.join("avatars", instance.username, prefix, extension)
即使扩展名可能是。jpg,你最终会得到一个名为“foobar”的文件夹,而不是一个名为“foobar.jpg”的文件。为了防止这种情况,你需要单独追加扩展:
return os.path.join("avatars", instance.username, prefix) + extension
我建议从第二个和下面的字符串中剥离字符串os.path。Sep,防止它们被解释为绝对路径:
first_path_str = '/home/build/test/sandboxes/'
original_other_path_to_append_ls = [todaystr, '/new_sandbox/']
other_path_to_append_ls = [
i_path.strip(os.path.sep) for i_path in original_other_path_to_append_ls
]
output_path = os.path.join(first_path_str, *other_path_to_append_ls)
为了让你的函数更可移植,可以这样使用它:
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')
os.path.join()的思想是让你的程序跨平台(linux/windows/etc)。
一刀就毁了它。
所以它只有在与某种参考点一起使用时才有意义 操作系统。environ['HOME']或os.path.dirname(__file__)。
像这样,去掉多余的斜杠
root="/home"
os.path.join(root,"build","test","sandboxes",todaystr,"new_sandbox")