按xarray中的值过滤文件列表,其中文件名包含填充数字

时间:2019-06-27 10:09:09

标签: python glob

我有一长串文件名(.ca 3000个元素),格式如下:

exclude  = exclude.values
exclude = [5, 8, 10, 20,..., 204]

每个文件的ID填充为零,最大为1000(即01000_type.png),类型可以采用3个值(圆形,椭圆形,立方体)。

和一个xarray(排除),其值标识要从该格式列表中排除的文件。为了引用这些值,我使用了:

files = 
['path/00001_type.png','path/00002_type.png','path/00003_type.png','path/00004_type.png','path/00006_type.png','path/00007_type.png','path/0000_type.png','path/00009_type.png', 'path/00011_type.png']

目标

针对所有类型生成一个列表,其中不包含ID不在排除列表中的文件:

files = []
for file in filenames:
    for ID not in exclude:
        if file.glob("*{:05d}_type.png".format(ID)) in item_list2[1]:
             files.append(e) 
files

我曾尝试使用regex和glob模块来选择文件,但是我无法找出正确的方法来搜索列表,并考虑填充和文件路径的其余部分。

我还想知道是否有比这更有效的方法。

我尝试过的例子

select
 t1.D_id, t1.O_id, t2.o_date, t2.Start_date, t1.amount 
from SUPPLY t1
outer apply (
     select O_id, Max(O_date) as o_date, MAX(Start_date) as Start_date from SUPPLY
        group by O_id
) as t2 where t2.O_id = t1.O_id and t2.o_date = t1.O_date and t2.Start_date = t1.Start_date

1 个答案:

答案 0 :(得分:3)

使用正则表达式。

演示:

import re
import os

filenames = ['path/00001_type.png','path/00002_type.png','path/00003_type.png','path/00004_type.png', 'path/00005_type.png', 'path/00006_type.png','path/00007_type.png','path/00008_type.png','path/00009_type.png', 'path/00011_type.png']
exclude = [5, 8]
files = []

for file in filenames:
    m = re.search(r"(\d+)", os.path.basename(file))    #Get Int from file name
    if m:
        if int(m.group(1)) not in exclude:  #Check in exclude list
            files.append(file)
print(files)

输出:

['path/00001_type.png',
 'path/00002_type.png',
 'path/00003_type.png',
 'path/00004_type.png',
 'path/00006_type.png',
 'path/00007_type.png',
 'path/00009_type.png',
 'path/00011_type.png']