我经常需要在Python
中提取文件的扩展名。我们经常在网上看到的用于此类任务的代码是使用os.path.splitext
:
fpath = "C:/I/am/hap.py"
ext = os.path.splitext(fpath)[-1]
为什么这比使用re.sub
(这很容易记住)更好?
fpath = "C:/I/am/hap.py"
ext = re.sub(r'.*\.', '.', fpath)
注意:每个解决方案中的字符数相同:)
答案 0 :(得分:0)
实际上,有两件事
更容易理解它是文件操作及其目的(如@larsks所述
os.path.splitext
将支持没有扩展名的情况:
例如,使用Makefile
:
>>> fpath = "C:/Dir/Makefile"
>>> os.path.splitext(fpath)[-1]
''
>>> re.sub(r'.*\.', '.', fpath)
'C:/Dir/Makefile'
答案 1 :(得分:0)
这是一个相当自以为是的问题(答案也是如此),但IMO:
1。)代码可读性。 splitext
已记录在案,易于查找以确切了解代码的作用,re.sub
将某些内容替换为"."
,但现在您在你理解正在发生的事情之前,需要解析那个正则表达式。
2。)没有无关的import
。对于其他地方没有正则表达式使用的代码,您不需要import re
,而如果您的代码用于修改系统文件,那么您很可能已经在使用import os
或{{ 1}}已经。
3。)KISS。您可以通过许多不同的方式获得相同的结果(例如from os import path
或ext = fpath[fpath.rfind('.'):]
,它们的字符都更短),但一般情况下,如果已经有内置函数来帮助实现它,除非你有充分的理由,否则不要重新发明轮子。
答案 2 :(得分:-1)
os
模块旨在处理各种场景。特别是在您的情况下,某些操作系统使用\
vs /
以及该操作系统独有的其他命名法。
如果您使用正则表达式进行操作,则必须考虑所有可能性和边缘情况。