为什么os.path.join()在这种情况下不工作?
下面的代码无法合并,调试时发现这个命令只保存了最后一部分路径,而不是整个路径。
os.path.join('/home/build/test/sandboxes/', todaystr, '/new_sandbox/')
当我测试这个时,它只保存了/new_sandbox/
这一部分。
16 个回答
95
os.path.join()
可以和 os.path.sep
一起使用,这样可以创建一个绝对路径,而不是相对路径。
os.path.join(os.path.sep, 'home','build','test','sandboxes',todaystr,'new_sandbox')
170
os.path.join()
的意思是让你的程序可以在不同的操作系统上运行,比如Linux、Windows等。
如果你在路径中随便加一个斜杠,就会出问题。
所以,使用这个函数时,最好有一个参考点,比如os.environ['HOME']
(用户的主目录)或者os.path.dirname(__file__)
(当前文件所在的目录)。
559
后面的字符串不应该以斜杠开头。如果它们以斜杠开头,就会被认为是“绝对路径”,这样之前的部分就会被忽略掉。
引用一下Python文档中关于os.path.join
的内容:
如果某个部分是绝对路径,之前的所有部分都会被丢弃,连接会从这个绝对路径部分继续。
关于Windows系统,有一点需要注意,和之前的Python版本相比,这里的行为似乎有了变化:
在Windows上,当遇到绝对路径部分(比如
r'\foo'
)时,驱动器字母不会被重置。如果某个部分包含驱动器字母,之前的所有部分都会被丢弃,并且驱动器字母会被重置。需要注意的是,由于每个驱动器都有当前目录,os.path.join("c:", "foo")
表示的是相对于驱动器C:
的当前目录的路径(即c:foo
),而不是c:\foo
。