Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式包括没有扩展名的文件和除某些扩展名(PNG或JPG)以外的所有扩展名_Python_Regex_File Type - Fatal编程技术网

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

Python 正则表达式包括没有扩展名的文件和除某些扩展名(PNG或JPG)以外的所有扩展名,python,regex,file-type,Python,Regex,File Type,我正试图找到一个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_201

我正试图找到一个
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!
&

&


为什么不使用
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,不应包括在内,否则它是安全的,可以包括在列表中。

为什么不包括:

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

这是完成这项特定任务的好方法。然而,我正试图为os.walk编写一个通用模式过滤,以便在我的各种代码中随处使用。所以,我倾向于正则表达式。
disallowed_types = ['png', 'jpg']

allowed = [x for x in allfiles if os.path.splitext(x)[1] not in disallowed_types]
regex = '[^.]*?\.+(jpg$|png$)'
>>> extensions = "png jpg npy".split()
>>> regex = "^.*%s$"
>>> regex%"".join("(?<!\.%s)"%i for i in extensions)
'^.*(?<!\\.png)(?<!\\.jpg)(?<!\\.npy)$'
all = [...]
# If you want to get all files with extension `'jpg', 'png', '...'`:

[i for i in [compiled.match(x) for x in a] if not i]

# Will get you all files with no extension, with .png or with .jpg

# If you want all OTHER files (like .zip):

[i for i in [compiled.match(x) for x in a] if i]