我正在学习Python,发现我的一个脚本出现了一些奇怪的问题。经过一些测试,我发现问题源自这种行为:
>>> import os
>>> os.path.join('a','b')
'a/b'
>>> os.path.join('a','/b')
'/b'
查看文档,事实上这就是该函数的设计:
os.path.join(path1[, path2[, ...]])
智能地连接一个或多个路径组件。如果任何组件是绝对路径,则丢弃所有先前的组件(在 Windows 上,包括以前的驱动器号(如果有)),然后继续连接...
我的问题不是 为什么我的脚本失败了,而是为什么函数被设计成这样。 我的意思是,在Unix上至少,`a//b` 是一种完全可以接受的方式来指定路径,即使不够优雅。 为什么要这样设计函数?是否有办法判断是否舍弃了一个或多个路径元素,而无需使用os.path.isabs()
测试每个路径字符串?
出于好奇,我也检查了路径组件以os.sep
字符结尾的情况:
>>> os.path.join('a/','b')
'a/b'
那个按预期工作。
filename.lstrip('/')
来检查这个。 - voithosfilename.lstrip(os.sep)
,这样就可以适用于大多数主要平台了。 - user395760os.sep + (os.altsep or "")
。 - Lauritz V. Thaulow