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

时间:2018-02-12 03:26:14

标签: python

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

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

3 个答案:

答案 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 pathext = fpath[fpath.rfind('.'):],它们的字符都更短),但一般情况下,如果已经有内置函数来帮助实现它,除非你有充分的理由,否则不要重新发明轮子。

答案 2 :(得分:-1)

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

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