Skip to main content
 首页 » 编程设计

python之正则表达式包括没有扩展名和除某些扩展名以外的所有扩展名的文件(PNG 或 JPG)

2024年11月01日30tuyile006

我正在尝试提出一个 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 

或列表格式:

[u'D:\\Projects\\5 Codes Cleaned\\2012\\1500_LT_Capped_2012 -P', 
 u'D:\\Projects\\5 Codes Cleaned\\2012\\1500_LT_Capped_2012 -P.npy', 
 u'D:\\Projects\\5 Codes Cleaned\\2012\\1500_LT_Capped_2012 -Sg', 
 u'D:\\Projects\\5 Codes Cleaned\\2012\\1500_LT_Capped_2012 -Sg.npy', 
 u'D:\\Projects\\5 Codes Cleaned\\2012\\1500_LT_Capped_2012 -So', 
 u'D:\\Projects\\5 Codes Cleaned\\2012\\1500_LT_Capped_2012 -So.npy', 
 u'D:\\Projects\\5 Codes Cleaned\\2012\\1500_LT_Capped_2012 -Sw', 
 u'D:\\Projects\\5 Codes Cleaned\\2012\\1500_LT_Capped_2012 -Sw.npy', 
 u'D:\\Projects\\5 Codes Cleaned\\2012\\PRESSURE-Average.png', 
 u'D:\\Projects\\5 Codes Cleaned\\2012\\SGAS-Average.png', 
 u'D:\\Projects\\5 Codes Cleaned\\2012\\SOIL-Average.png', 
 u'D:\\Projects\\5 Codes Cleaned\\2012\\SWAT-Average.png', 
 u'D:\\Projects\\5 Codes Cleaned\\2012\\SG\\SG.zip', 
 u'D:\\Projects\\5 Codes Cleaned\\2012\\SG\\SOIL-Average.jpg', 
 u'D:\\Projects\\5 Codes Cleaned\\2012\\SG\\SWAT-Average.jpg', 
 u'D:\\Projects\\5 Codes Cleaned\\2012\\SG\\Test'] 

我查看了此处进行的一些线程以获取一些想法,但我想知道是否有更简单的方法来做到这一点。到目前为止,我已经尝试了以下模式来过滤掉 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 

请您参考如下方法:

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

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

但如果你必须使用正则表达式,这似乎有效,但相反:

regex = '[^.]*?\.+(jpg$|png$)' 

那么如果它匹配这个,它是一个 jpg 或 png 并且不应该被包含,否则它是安全的并且可以被包含在列表中。