在另一个问题中,投票清楚地表明该os.path.splitext
函数比简单的.split('.')[-1]
字符串操作更受欢迎.有没有人有时间解释为什么会这样?是更快,更准确,还是什么?我愿意接受它有更好的东西,但我不能立即看到它可能是什么.可能导入整个模块来做这件事有点矫枉过正,至少在简单的情况下呢?
编辑:操作系统特异性是一个巨大的胜利,并不是立即显而易见的; 但即便如此,我也应该看到"如果没有一个点"会怎样的情况!并感谢大家对图书馆使用的一般评论.
那么,单独的操作系统有单独的实现.这意味着如果提取文件扩展名的逻辑在Mac上与Linux上的不同,那么这些区别将由这些区别来处理.我不知道有任何这样的区别,所以可能没有.
编辑:@Brian注释一个例子/directory.ext/file
当然不适用于简单的.split('.')
调用,你必须知道两个目录都可以使用扩展,以及在某些操作系统上,正斜杠是一个有效的目录分隔符这一事实.
这只是强调使用库例程,除非你有充分的理由不参与我的答案.
谢谢@Brian.
此外,如果文件没有扩展名,则必须构建逻辑来处理该情况.如果你试图拆分的东西是一个以反斜杠结尾的目录名怎么办?没有文件名也没有扩展名.
规则应该是除非您有特殊原因不使用符合您需要的库函数,否则请使用它.这将避免您必须维护和修复代码,其他人有完美的解决方案.
os.path.splitext将正确处理文件没有扩展名并返回空字符串的情况..split将返回文件的名称.
splitext()
反向搜索'.' 并在找到后立即返回扩展部分.split('.')
将对所有''进行前瞻性搜索.字符,因此几乎总是较慢.换句话说splitext()
,专门为返回扩展而编写split()
.
(如果要检查实现,请参阅Python源代码中的posixpath.py).
存在不使用'.'的操作系统.作为扩展分隔符.
(值得注意的是,按惯例,RISC OS使用'/',因为'.'在那里用作路径分隔符.)