我正在处理一些我无法更改的遗留代码(原因)。
它使用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)来看,似乎不是,但我认为询问是值得一试的。
发布于 2017-03-17 20:07:19
来自fnmatch.fnmatch文档:
模式是Unix样式: *匹配一切 ?匹配任何单个字符 seq匹配seq中的任何字符。 !seq匹配不在seq中的任何字符。
当我跑步时:
for path in paths:
if fnmatch.fnmatch(path, '[!b]*'):
print path我得到:
a/x.txt发布于 2018-02-23 18:17:06
不知怎么,这个方法适用于字母表就在“!”之后。
例如,在我的例子中,来自list col_names
“# Spec No”、“Name”、“Date(DD/mm/YYYY)”、“time(hh:mm:ss)”、“YYYY”、“年份”、“分数日”、“分数时间”、“扫描”、“Tint”、“SZA”、“NO2_UV.RMS”、“NO2_UV.RefZm”、“NO2UV.RefNumber”、“NO2_UV.SlCol(Bro)”、“NO2_UV.SlErr(Bro)”,“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)”,“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(频谱)”,“NO2_UV.Stretch(光谱)1”、“NO2_UV.Stretch(光谱)2”、“HCHO.rms”、“HCHO.RefZm”、“HCHO.RefNumber”、“HCHO.SlCol(Bro)”、“HCHO.SlErr(Bro)”、“HCHO.SlCol(环状)”、“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(光谱)’,‘HCHO.Stretch(光谱)1’,‘HCHO.Stretch(光谱)2’,‘通量318',’通量330',‘通量390',’通量440‘,我想搜索所有不包含NO2_UV的名称。如果我做了
header_hcho = fnmatch.filter(col_names, '[!NO2_UV.]*');它排除了第二个元素,即“Name”。,因为它以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+1https://stackoverflow.com/questions/41471030
复制相似问题