我正在处理一些我无法改变的遗留代码(原因)。
它使用fnmatch.fnmatch
来过滤路径列表,如此(简化):
import fnmatch
paths = ['a/x.txt', 'b/y.txt']
for path in paths:
if fnmatch.fnmatch(path, '*.txt'):
print 'do things'
通过配置,我可以更改用于匹配文件的模式。我需要排除b/
中的所有内容,这可能吗?
从阅读文档(https://docs.python.org/2/library/fnmatch.html)看来似乎不是,但我认为值得一试。
答案 0 :(得分:1)
来自fnmatch.fnmatch文档:
模式是Unix shell风格:
*匹配所有内容
?匹配任何单个字符
[seq]匹配seq中的任何字符
[!seq]匹配不在seq中的任何char
当我跑步时:
for path in paths:
if fnmatch.fnmatch(path, '[!b]*'):
print path
我明白了:
a/x.txt
答案 1 :(得分:0)
不知何故,这种方法适用于"!'
之后的字母表例如在我的案例中,来自列表 col_names
[' #Specus No','姓名','日期(DD / MM / YYYY)','时间( hh:mm:ss)','年', ' Fractional day' Fractional time',' Scans'' Tint',' SZA', ' NO2_UV.RMS',' NO2_UV.RefZm',' NO2_UV.RefNumber',' NO2_UV.SlCol(bro)', ' NO2_UV.SlErr(兄弟)',#39; NO2_UV.SlCol(戒指)'' NO2_UV.SlErr(戒指)', ' NO2_UV.SlCol(HCHO)' NO2_UV.SlErr(HCHO)'' NO2_UV.SlCol(O4)', ' NO2_UV.SlErr(O4)'' NO2_UV.SlCol(O3a)',' NO2_UV.SlErr(O3a)', ' NO2_UV.SlCol(O3223k)'' NO2_UV.SlErr(O3223k)',#39; NO2_UV.SlCol(NO2)', ' NO2_UV.SlErr(NO2)',' NO2_UV.SlCol(no2a)',' NO2_UV.SlErr(no2a)', ' NO2_UV.Offset(常数)',' NO2_UV.Err(偏移(常数))', ' NO2_UV.Offset(订单1)',' NO2_UV.Err(抵消(订单1))', ' NO2_UV.Shift(Spectrum)',' NO2_UV.Stretch(Spectrum)1', ' NO2_UV.Stretch(Spectrum)2',' HCHO.RMS',' HCHO.RefZm',' HCHO.RefNumber', ' HCHO.SlCol(bro)' HCHO.SlErr(bro)' HCHO.SlCol(ring)', ' HCHO.SlErr(戒指)' HCHO.SlCol(HCHO)' HCHO.SlErr(HCHO)', ' HCHO.SlCol(O4)' HCHO.SlErr(O4)' HCHO.SlCol(O3a)', ' HCHO.SlErr(O3a)' HCHO.SlCol(O3223k)' HCHO.SlErr(O3223k)', ' HCHO.SlCol(NO2)' HCHO.SlErr(NO2)',' HCHO.Offset(常数)', ' HCHO.Err(抵消(常数))',' HCHO.Offset(订单1)', ' HCHO.Err(抵消(订单1))',' HCHO.Shift(Spectrum)', ' HCHO.Stretch(Spectrum)1',' HCHO.Stretch(Spectrum)2',' Fluxes 318', ' Fluxes 330',' Fluxes 390',' Fluxes 440'] 我想搜索所有不含NO2_UV的名字。 如果我做
header_hcho = fnmatch.filter(col_names, '[!NO2_UV.]*');
它排除了第二个元素" Name&#34 ;.,因为它以N开头。结果和我一样
header_hcho = fnmatch.filter(col_names, '[!N]*');
所以,我选择了一种老式的方法
header_hcho = []
idx=0
for idx in range(0, len(col_names)):
if col_names[idx].find("NO2_UV") == -1:
header_hcho.append(col_names[idx])
idx=idx+1