我有一个目录,其中包含一些遵循类似命名约定的图像序列,例如: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"之间的文件是否丢失或重复