2024-06-16 10:51:27 发布
网友
我经常需要在Python中提取文件的扩展名。我们经常在网上看到的这类任务的代码是使用os.path.splitext:
Python
os.path.splitext
fpath = "C:/I/am/hap.py" ext = os.path.splitext(fpath)[-1]
有什么理由比使用re.sub(这很容易记住)更好呢?你知道吗
re.sub
fpath = "C:/I/am/hap.py" ext = re.sub(r'.*\.', '.', fpath)
注意:每个解决方案中的字符数相同:)
os模块是用来处理各种场景的。特别是在您的案例中,一些操作系统使用\vs /以及该操作系统特有的其他术语。你知道吗
os
\
/
如果你使用regex,你必须考虑所有的可能性和边缘情况。你知道吗
实际上,有两件事
更容易理解的是,这是一种文件操作及其目的(如@larsks所述)
os.path.splitext将支持没有扩展名的情况:
例如,使用Makefile:
Makefile
>>> fpath = "C:/Dir/Makefile" >>> os.path.splitext(fpath)[-1] '' >>> re.sub(r'.*\.', '.', fpath) 'C:/Dir/Makefile'
这是一个相当固执己见的问题(答案也是如此),但国际海事组织:
1.)代码可读性。splitext是有文档记录的,很容易查找以确切地知道代码在做什么,其中asre.sub将某物替换为".",但是现在需要在理解发生了什么之前解析regex。你知道吗
splitext
"."
2.)没有多余的imports。对于其他地方没有regex用法的代码,您不需要import re,而如果您的代码是用来修补系统文件的,那么您很可能已经在使用import os或from os import path。你知道吗
import
import re
import os
from os import path
3.)亲吻。你可以用很多不同的方法(例如ext = fpath[fpath.rfind('.'):]或ext = f'.{fpath.split(".")[-1]}'来达到相同的结果,这两种方法的字符都更短),但一般来说,如果已经有一个内置函数来帮助实现它,除非你有充分的理由,否则不要重新发明轮子。你知道吗
ext = fpath[fpath.rfind('.'):]
ext = f'.{fpath.split(".")[-1]}'
os
模块是用来处理各种场景的。特别是在您的案例中,一些操作系统使用\
vs/
以及该操作系统特有的其他术语。你知道吗如果你使用regex,你必须考虑所有的可能性和边缘情况。你知道吗
实际上,有两件事
更容易理解的是,这是一种文件操作及其目的(如@larsks所述)
os.path.splitext
将支持没有扩展名的情况:例如,使用
Makefile
:这是一个相当固执己见的问题(答案也是如此),但国际海事组织:
1.)代码可读性。
splitext
是有文档记录的,很容易查找以确切地知道代码在做什么,其中asre.sub
将某物替换为"."
,但是现在需要在理解发生了什么之前解析regex。你知道吗2.)没有多余的
import
s。对于其他地方没有regex用法的代码,您不需要import re
,而如果您的代码是用来修补系统文件的,那么您很可能已经在使用import os
或from os import path
。你知道吗3.)亲吻。你可以用很多不同的方法(例如
ext = fpath[fpath.rfind('.'):]
或ext = f'.{fpath.split(".")[-1]}'
来达到相同的结果,这两种方法的字符都更短),但一般来说,如果已经有一个内置函数来帮助实现它,除非你有充分的理由,否则不要重新发明轮子。你知道吗相关问题 更多 >
编程相关推荐