为什么os.path.join()在这种情况下不工作?

420 投票
16 回答
650429 浏览
提问于 2025-04-15 17:16

下面的代码无法合并,调试时发现这个命令只保存了最后一部分路径,而不是整个路径。

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

撰写回答