我有一个包含 9 个图像的目录:
图像_0001、图像_0002、图像_0003 图像_0010,图像_0011 图像_0011-1、图像_0011-2、图像_0011-3 image_9999
我希望能够以有效的方式列出它们,如下所示(9 个图像的 4 个条目):
(image_000[1-3], image_00[10-11], image_0011-[1-3], image_9999)
python中有没有办法以简短/清晰的方式返回图像目录(不列出每个文件)?
所以,可能是这样的:
列出所有图像,按数字排序,创建一个列表(从开始按顺序计算每个图像)。当图像丢失时(创建一个新列表),继续直到原始文件列表完成。现在我应该只有一些包含非损坏序列的列表。
我试图让阅读/描述数字列表变得容易。如果我有 1000 个连续文件的序列 它可以清楚地列为 file[0001-1000] 而不是 file['0001','0002','0003' 等...]
Edit1(基于建议):给定一个扁平列表,您将如何推导出全局模式?
Edit2 我试图将问题分解成更小的部分。以下是部分解决方案的示例:data1 有效,data2 返回 0010 为 64,data3(实际数据)无效:
# Find runs of consecutive numbers using groupby. The key to the solution
# is differencing with a range so that consecutive numbers all appear in
# same group.
from operator import itemgetter
from itertools import *
data1=[01,02,03,10,11,100,9999]
data2=[0001,0002,0003,0010,0011,0100,9999]
data3=['image_0001','image_0002','image_0003','image_0010','image_0011','image_0011-2','image_0011-3','image_0100','image_9999']
list1 = []
for k, g in groupby(enumerate(data1), lambda (i,x):i-x):
list1.append(map(itemgetter(1), g))
print 'data1'
print list1
list2 = []
for k, g in groupby(enumerate(data2), lambda (i,x):i-x):
list2.append(map(itemgetter(1), g))
print '\ndata2'
print list2
返回:
data1
[[1, 2, 3], [10, 11], [100], [9999]]
data2
[[1, 2, 3], [8, 9], [64], [9999]]