Python:打开与模式不匹配的所有文件
我试图打开目录中与模式不匹配的所有文件。目录中会有一些文件,如Python:打开与模式不匹配的所有文件,python,glob,Python,Glob,我试图打开目录中与模式不匹配的所有文件。目录中会有一些文件,如x_0192910,y_18329123和z_00000000;我想打开所有不以“00000000”结尾的文件,八个零。我一直在尝试使用glob.glob(),但无法正确使用正则表达式。我尝试过像*^0{8,8}和*[!0]这样的方法,但我不确定如何构造正确的表达式 总之,我只需要像glob.glob('not*.\u00000000')这样的东西。有人能帮忙吗?您是否考虑过过滤glob返回的列表?比如: for e in glob.
x_0192910
,y_18329123
和z_00000000
;我想打开所有不以“00000000
”结尾的文件,八个零。我一直在尝试使用glob.glob()
,但无法正确使用正则表达式。我尝试过像*^0{8,8}
和*[!0]
这样的方法,但我不确定如何构造正确的表达式
总之,我只需要像
glob.glob('not*.\u00000000')
这样的东西。有人能帮忙吗?您是否考虑过过滤glob
返回的列表?比如:
for e in glob.glob('*'):
if e[-9:] == "_00000000":
continue
# Do whatever you like
您可以使用endswith和filter:
import glob
for i in filter(lambda x:not x.endswith('_00000000'), glob.glob('*.*')):
print i
您还可以使用列表理解:
import glob
for i in [e for e in glob.glob('*.*') if not e.endswith('_00000000')]:
print i
全局表达式与正则表达式有着根本的不同 最接近的可能是“在最后8个字符中没有“0”。如果这还不够好,您只需获取完整列表并使用
endswith
进行筛选即可
FWIW,全局模式规则为:
* match 0 or more "any character"
? match exactly one "any character"
[...] match character range
[!...] negated character range (all but the chars in the range
regex
^(?。*?0{8}$)。+$
注意glob模式不是regex。我很想把这个字符串写成'.'+8*'0'
;它不短很多,但更容易看到,正好有八个零。