Jon*_*son 12 python language-design
我正在学习Python,我注意到我的一个脚本有些奇怪.做一点测试我发现问题源于这种行为:
>>> import os
>>> os.path.join('a','b')
'a/b'
>>> os.path.join('a','/b')
'/b'
Run Code Online (Sandbox Code Playgroud)
检查文档,实际上这是函数的设计:
os.path中.join(path1 [,path2 [,... ]])
智能地加入一个或多个路径组件.如果任何组件是绝对路径,则所有以前的组件(在Windows上,包括之前的驱动器号,如果有的话)都将被丢弃,并继续加入....
我的问题不是我的脚本失败的原因,而是为什么函数是这样设计的.我的意思是,至少在Unix上a//b,如果不是优雅的话,是指定路径的完全可接受的方式.为什么功能是这样设计的?有没有办法判断一个或多个路径元素是否已被丢弃,而os.path.isabs()不是测试每个路径字符串?
出于好奇,我还检查了一个路径组件以os.sep字符结尾的情况:
>>> os.path.join('a/','b')
'a/b'
Run Code Online (Sandbox Code Playgroud)
这按预期工作.
unu*_*tbu 14
如果您向用户询问文件名os.path.join('a', '/b'),则返回的一个案例就是返回/b.
用户可以输入相对于当前目录的路径或完整路径,并且您的程序可以处理这两种情况:
os.path.join(os.getcwd(), filename)
Run Code Online (Sandbox Code Playgroud)
In [54]: os.getcwd()
Out[54]: '/tmp'
In [55]: os.path.join(os.getcwd(), 'foo')
Out[55]: '/tmp/foo'
In [56]: os.path.join(os.getcwd(), '/foo/bar')
Out[56]: '/foo/bar'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
775 次 |
| 最近记录: |