REGEX包含没有扩展名的文件和除某些扩展名(PNG或JPG)以外的所有扩展名

2024-05-18 06:51:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用regex来在扫描根文件夹时使用os.walk只过滤出一个或多个特定类型(扩展名)的文件。我的文件夹结构(要搜索)如下所示。请注意没有扩展名的文件。在

Directory: D:\Projects\5 Codes Cleaned\2012

SG
|---SG.zip
|---SOIL-Average.jpg
|---SWAT-Average.jpg
|---Test
1500_LT_Capped_2012
1500_LT_Capped_2012
1500_LT_Capped_2012
1500_LT_Capped_2012
1500_LT_Capped_2012
1500_LT_Capped_2012
1500_LT_Capped_2012
1500_LT_Capped_2012
PRESSURE-Average.png
SGAS-Average.png
SOIL-Average.png
SWAT-Average.png

或列表格式:

^{pr2}$

我查阅了一些在这里进行的线程,以获得一些想法,但我想知道有没有更简单的方法来做到这一点。到目前为止,我已经尝试了以下模式来过滤os.walk 结果:

regex = "^.*(?<!\.png)(?<!\.npy)$"    
# The only working one but tends to get messy 
# as more file types are to be excluded!

&

regex = "^(.+?)(?:\.(?:png|jpg))*$"   
# Does not filter out jpg or png...list all files

&

regex = '^.*\.(?!jpg$|png$)[^.]+$'    
# Filters out png & jpg but Does not include No-Extensions !

&

regex = '^.*\.*(?!.jpg$|.png$)'     
# Does not filter out png & jpg file

Tags: 文件lt文件夹pngosnotsgout
2条回答

为什么不使用os.path.splitext和列表理解?在

disallowed_types = ['png', 'jpg']

allowed = [x for x in allfiles if os.path.splitext(x)[1] not in disallowed_types]

但如果您必须使用regex,这似乎是有效的,但反过来:

^{pr2}$

因此,如果它与此匹配,那么它是jpg或png,不应该包含在其中,否则它是安全的,可以包含在列表中。在

为什么不只是:

>>> extensions = "png jpg npy".split()
>>> regex = "^.*%s$"
>>> regex%"".join("(?<!\.%s)"%i for i in extensions)
'^.*(?<!\\.png)(?<!\\.jpg)(?<!\\.npy)$'

然后:

^{pr2}$

相关问题 更多 >