按文件基名排序路径列表(Python)

时间:2018-06-16 20:41:34

标签: python sorting

我有一个带图片的文件夹。 我在列表中添加了每个图像的路径。它们不按字母顺序排序。 我把这个功能排序,但结果是我在排序后打印列表时的结果是一样的。

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,就不会重复。

1 个答案:

答案 0 :(得分:2)

使用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. .拆分并提取第一个元素。
  4. 然后从第1个字符开始。
  5. 将结果转换为int以进行数字排序。