如何按文件basename(Python)排序路径列表?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (33)

我有一个有图像的文件夹。我在列表中添加了每个图像的路径。它们不是按字母顺序排列的。我做了这个函数排序,但我的结果,这是相同的,当我打印列表后,我进行了排序:

import os
import glob

images_path = os.path.expanduser('~\\Desktop\\samples\\')

def img_path_list():
    img_list = []
    for file_path in glob.glob(str(images_path) + "*.jpg"):
        img_list.append(file_path)

    img_list.sort(key=lambda x: str(x.split('.')[0]))

    return img_list

print(img_path_list())

结果仍然是:[Desktop\\t0.jpg, Desktop\\t1.jpg, Desktop\\t10.jpg, Desktop\\t11.jpg, Desktop\\t2.jpg, ...]

只要我没有要求使用natsort模块,但使用简单的python。

提问于
用户回答回答于

使用os.path.basename并且假设你的文件名是所有的格式。X#.jpg带着X一个字符:

import os

img_list = ['Desktop\\t0.jpg', 'Desktop\\t1.jpg',
            'Desktop\\t10.jpg', 'Desktop\\t11.jpg',
            'Desktop\\t2.jpg']

img_list.sort(key=lambda x: int(os.path.basename(x).split('.')[0][1:]))

print(img_list)

['Desktop\\t0.jpg', 'Desktop\\t1.jpg',
 'Desktop\\t2.jpg', 'Desktop\\t10.jpg',
 'Desktop\\t11.jpg']

使用命名函数来说明lambda作品:

def sorter(x):
    return int(os.path.basename(x).split('.')[0][1:])

img_list.sort(key=sorter)

这里有几个步骤:

1.通过os.path.basename提取文件名。

2.拆分并提取第一个元素。

3.然后从第1个字符开始切片。

4.将结果转换为int以进行数字排序。

扫码关注云+社区

领取腾讯云代金券