如何在 python 中按名称和扩展名升序对文件进行排序?

问题描述 投票:0回答:1

您能帮我解决这个问题吗? 我怎样才能在Python中对这个'.tif'文件进行升序排序?

数据 = ['prec0000.491.tif', 'prec0000.1.tif', 'prec0000.750.tif', 'prec0000.4.tif', 'prec0000.0570.tif', 'prec0000.0459.tif', 'prec0000.313.tif', 'prec0000.118.tif', 'prec0000.0295.tif', 'prec0000.492.tif', 'prec0000.0752.tif', 'prec0000.0171.tif', 'prec0000.437.tif', 'prec0000.2.tif']

我想对这些文件进行升序排序。例如:['prec0000.1.tif', 'prec0000.2.tif',..., 'prec0000.0752.tif']

非常感谢您的帮助! 谢谢!

我已经尝试通过此代码:

数据=排序(数据,键= lambda x:str(os.path.splitext(x)))

我的输出是:

['prec0000.0171.tif', 'prec0000.0295.tif', 'prec0000.0459.tif', 'prec0000.0570.tif', 'prec0000.0752.tif', 'prec0000.1.tif', 'prec0000.118.tif', 'prec0000.2.tif', 'prec0000.313.tif', 'prec0000.4.tif', 'prec0000.437.tif', 'prec0000.491.tif', 'prec0000.492.tif', 'prec0000.750.tif']

python-3.x string sorting lambda substring
1个回答
0
投票

问题在于您当前的 lambda 函数用作

sorted
函数中的键。
os.path.splitext
函数返回文件的基本名称和扩展名的元组,这导致排序基于该元组。

以下是实现所需排序的方法:

import os

data = ['prec0000.491.tif', 'prec0000.1.tif', 'prec0000.750.tif', 'prec0000.4.tif', 'prec0000.0570.tif', 'prec0000.0459.tif', 'prec0000.313.tif', 'prec0000.118.tif', 'prec0000.0295.tif', 'prec0000.492.tif', 'prec0000.0752.tif', 'prec0000.0171.tif', 'prec0000.437.tif', 'prec0000.2.tif']

data = sorted(data, key=lambda x: float(x.split('.')[1]))

print(data)

此代码将输出所需的排序文件名:

['prec0000.1.tif', 'prec0000.2.tif', 'prec0000.0295.tif', 'prec0000.0459.tif', 'prec0000.0570.tif', 'prec0000.118.tif', 'prec0000.313.tif', 'prec0000.4.tif', 'prec0000.437.tif', 'prec0000.491.tif', 'prec0000.492.tif', 'prec0000.750.tif', 'prec0000.0171.tif', 'prec0000.0752.tif']
© www.soinside.com 2019 - 2024. All rights reserved.