我有一长串文件名(.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
答案 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']