下面的代码将不会连接,在调试时,命令不存储整个路径,而只存储最后一个条目。
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', "]
*在列表前面列出列表的每一项自己的参数
其他回答
这是因为'/new_sandbox/'以/开头,因此被认为是相对于根目录的。去掉前导的/。
只使用new_sandbox试试
os.path.join('/home/build/test/sandboxes/', todaystr, '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', "]
*在列表前面列出列表的每一项自己的参数
不要在路径组件的开头使用正斜杠,除非指向根目录:
os.path.join('/home/build/test/sandboxes', todaystr, 'new_sandbox')
参见:http://docs.python.org/library/os.path.html#os.path.join
请注意,如果使用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