如何在python中排序图像序列(具有不同的扩展名)

2024-05-16 18:39:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个:

list = ["0001.exr", "0003.exr", "0002.dpx", "0001.dpx", "0002.exr", "0003.dpx"]

list.sort()

for line in list:
    print (line)

它返回这个:

0001.dpx

0001.exr

0002.dpx

0002.exr

0003.dpx

0003.exr

如何返回此结果?(简单地说)

0001.dpx

0002.dpx

0003.dpx

0001.exr

0002.exr

0003.exr


Tags: inforlinesortlistprintexrdpx
3条回答

您可以将内置的sorted()函数与名为sort的自定义cmp函数一起使用:

l = ["0001.exr", "0003.exr", "0002.dpx", "0001.dpx", "0002.exr", "0003.dpx"]

def sort(a, b):
    if 'dpx' in a and 'exr' in b:
        return -1
    if float(a.split('.')[0]) < float(b.split('.')[0]):
        return -1
    return 1

answer = sorted(l, cmp=sort)
print(answer)

输出

['0001.dpx', '0002.dpx', '0003.dpx', '0001.exr', '0002.exr', '0003.exr']

另外,您不应该使用list作为变量名来屏蔽内置的list()函数。你知道吗

您可以根据名称进行排序,然后使用OS库获取扩展并根据它进行排序(作为键):

list.sort()
list.sort(key=lambda list_item: os.path.splitext(list_item)[-1])

只需为.sort()使用一个键,该键将"."后面的内容放在比前面的内容更重要的位置:

list.sort(key=lambda l: "".join(reversed(l.split(".")))

相关问题 更多 >