当前位置: 代码迷 >> python >> 在 Python 中提取文件扩展名:os.path.splitext vs re.sub
  详细解决方案

在 Python 中提取文件扩展名:os.path.splitext vs re.sub

热度:72   发布时间:2023-07-16 10:36:00.0

我经常需要在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)

注意:每个解决方案中的字符数相同:)

其实2件事

  • 更容易理解它是一种文件操作及其目的(如@larsks 所述

  • os.path.splitext将支持没有扩展名的情况:

例如,使用Makefile

>>> fpath = "C:/Dir/Makefile"
>>> os.path.splitext(fpath)[-1]
''
>>> re.sub(r'.*\.', '.', fpath)
'C:/Dir/Makefile'

这是一个相当固执的问题(答案也是如此),但 IMO:

1.) 代码可读性。 splitext文本已记录并易于查找以确切了解代码在做什么,因为re.sub某些内容替换为"." ,但现在您需要先解析该正则表达式,然后才能了解发生了什么。

2.) 没有无关的import s。 对于在其他任何地方都没有使用正则表达式的代码,您不需要import re ,而如果您的代码用于修补系统文件,您很可能已经在使用import osfrom os import path了。

3.) 吻。 您可以通过许多不同的方式获得相同的结果(例如ext = fpath[fpath.rfind('.'):]ext = f'.{fpath.split(".")[-1]}'其中两个字符都更短),但总的来说,如果已经有一个内置函数来帮助实现它,除非你有充分的理由,否则不要重新发明轮子。

os模块旨在处理各种场景。 特别是在您的情况下,某些操作系统使用\\ vs /以及该操作系统独有的其他命名法。

如果您使用正则表达式完成此操作,则必须考虑所有可能性和边缘情况。

  相关解决方案