我想拿出一個regex
只在使用os.walk
掃描根文件夾時過濾掉一個或多個特定類型(擴展名)的文件。我的文件夾結構(待搜索)看起來像這樣。請注意沒有擴展名的文件。REGEX包括文件沒有擴展名和所有擴展名除外某些人(PNG或JPG)
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.walk編寫一個通用的模式過濾器,以便在各種代碼中隨處使用。所以,我傾向於正則表達式。 – Moe