在Python中提取文件扩展名:操作系统路径拆分文本与回复sub

2024-06-16 10:51:27 发布

您现在位置: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)

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


Tags: 文件path代码pyreos解决方案am
3条回答

os模块是用来处理各种场景的。特别是在您的案例中,一些操作系统使用\vs /以及该操作系统特有的其他术语。你知道吗

如果你使用regex,你必须考虑所有的可能性和边缘情况。你知道吗

实际上,有两件事

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

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

例如,使用Makefile

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

这是一个相当固执己见的问题(答案也是如此),但国际海事组织:

1.)代码可读性。splitext是有文档记录的,很容易查找以确切地知道代码在做什么,其中asre.sub某物替换为".",但是现在需要在理解发生了什么之前解析regex。你知道吗

2.)没有多余的imports。对于其他地方没有regex用法的代码,您不需要import re,而如果您的代码是用来修补系统文件的,那么您很可能已经在使用import osfrom os import path。你知道吗

3.)亲吻。你可以用很多不同的方法(例如ext = fpath[fpath.rfind('.'):]ext = f'.{fpath.split(".")[-1]}'来达到相同的结果,这两种方法的字符都更短),但一般来说,如果已经有一个内置函数来帮助实现它,除非你有充分的理由,否则不要重新发明轮子。你知道吗

相关问题 更多 >