正在寻找一种在目录中列出各种图像序列的方法



我有一个目录,其中包含一些遵循类似命名约定的图像序列,例如:test.1001.exr、test.1002.exr、test.1001.dpx、test.1002-dpx。

我正在尝试编写一些代码,输出以下内容:

test.1001-1002.exr

测试02.1001-1002.dpx

我找到了一个例子,它确实以我想要的方式列出了它们,但它不是很健壮,除非我打印特定的扩展名,否则不会显示文件扩展名。

if os.path.exists(scanDir) is True:
scans = []
for root, dirnames, filenames in os.walk(scanDir):
for file in filenames:
for ext in fileFormats:
if ext in file:
scans.append(file)
scans = [os.path.splitext(file)[0] for file in scans]
scans.sort()
def extract_number(name):
return re.findall(r"d+$", name)[0]
def collapse_group(group):
if len(group) == 1:
return group[0][1]  # Unique names collapse to themselves.
first = extract_number(group[0][1])  # Fetch range
last = extract_number(group[-1][1])  # of this group.
length = len(str(int(last)))
return "%s%s-%s%s" % (group[0][1][:-length],
first[-length:], last[-length:], ".dpx")
groups = [collapse_group(tuple(group)) 
for key, group in itertools.groupby(enumerate(scans),
lambda index_name: index_name[0] - int(extract_number(index_name[1])))]
else:
groups = []

我不确定我是否能够修改代码以实现我的结果。有人知道我能做这件事的方法吗?

如果我理解你的问题,请纠正以下问题:

scans=['test.1001.exr', 'test.1002.exr', 'test.1003.exr', 'test.1001.dpx', 'test.1002.dpx',  'test.1003.dpx',  'test.1004.dpx',  'test.1005.dpx']
look_up={}
for scan in scans:
file_extension=scan.split('.')[-1] # last element
number=scan.split('.')[1]
if file_extension not in look_up:
look_up[file_extension]=[number]
else:
look_up[file_extension].append(number)
for file_extension in set(look_up.keys()):
numbers=sorted(look_up[file_extension])
Nmin=numbers[0]
Nmax=numbers[-1]
print("test.{0}-{1}.{2}".format(Nmin,Nmax, file_extension))

这给了你:

test.1001-1003.exr
test.1001-1005.dpx

重要:此代码不检查"Nmin"one_answers"Nmax"之间的文件是否丢失或重复

最新更新