下面的代码将不会加入,在调试时,命令不会存储整个路径,只会存储最后一个条目.
os.path.join('/home/build/test/sandboxes/', todaystr, '/new_sandbox/')
Run Code Online (Sandbox Code Playgroud)
当我测试它时,它只存储/new_sandbox/代码的一部分.
Cra*_*een 400
后面的字符串不应该以斜杠开头.如果他们以斜线开头,则它们被视为"绝对路径",并且它们之前的所有内容都将被丢弃.
如果组件是绝对路径,则抛弃所有先前组件并从绝对路径组件继续连接.
关于Windows的注意事项,与驱动器号有关的行为,与早期的Python版本相比似乎有所改变:
在Windows上,
r'\foo'遇到绝对路径组件(例如)时,不会重置驱动器号.如果组件包含驱动器号,则会丢弃所有先前的组件并重置驱动器号.请注意,由于每个驱动器都有一个当前目录,os.path.join("c:", "foo")表示相对于driveC:(c:foo)上当前目录的路径,而不是c:\foo.
Ant*_*ins 147
这个想法os.path.join()是让你的程序跨平台(linux/windows/etc).
即使是一个斜线也会破坏它.
所以被一些有点像一个参考点使用时它才有意义
os.environ['HOME']或os.path.dirname(__file__).
小智 71
os.path.join()可以与结合使用os.path.sep来创建绝对路径而不是相对路径.
os.path.join(os.path.sep, 'home','build','test','sandboxes',todaystr,'new_sandbox')
Run Code Online (Sandbox Code Playgroud)
mik*_*iku 22
除了在引用根目录时,不要在路径组件的开头使用正斜杠:
os.path.join('/home/build/test/sandboxes', todaystr, 'new_sandbox')
Run Code Online (Sandbox Code Playgroud)
另见:http://docs.python.org/library/os.path.html#os.path.join
Dav*_*ver 19
为了帮助理解为什么这种令人惊讶的行为并不完全可怕,请考虑一个接受配置文件名作为参数的应用程序:
config_root = "/etc/myapp.conf/"
file_name = os.path.join(config_root, sys.argv[1])
Run Code Online (Sandbox Code Playgroud)
如果应用程序执行时:
$ myapp foo.conf
Run Code Online (Sandbox Code Playgroud)
/etc/myapp.conf/foo.conf将使用配置文件.
但请考虑如果调用应用程序时会发生什么:
$ myapp /some/path/bar.conf
Run Code Online (Sandbox Code Playgroud)
然后myapp 应该使用配置文件/some/path/bar.conf(而不是/etc/myapp.conf/some/path/bar.conf或类似).
它可能不是很好,但我相信这是绝对路径行为的动机.
为了使您的功能更便携,请使用它:
os.path.join(os.sep, 'home', 'build', 'test', 'sandboxes', todaystr, 'new_sandbox')
Run Code Online (Sandbox Code Playgroud)
要么
os.path.join(os.environ.get("HOME"), 'test', 'sandboxes', todaystr, 'new_sandbox')
Run Code Online (Sandbox Code Playgroud)
尝试的组合split("/"),并*与现有的连接字符串.
import os
home = '/home/build/test/sandboxes/'
todaystr = '042118'
new = '/new_sandbox/'
os.path.join(*home.split("/"), todaystr, *new.split("/"))
Run Code Online (Sandbox Code Playgroud)
这个怎么运作...
split("/") 将现有路径转换为列表: ['', 'home', 'build', 'test', 'sandboxes', '']
* 在列表的前面突出列表的每个项目自己的参数
尝试new_sandbox仅使用
os.path.join('/home/build/test/sandboxes/', todaystr, 'new_sandbox')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
465851 次 |
| 最近记录: |