1. 需求分析
- 获取文件夹中的所有文件名称;
- 筛选所有文件名称中的图片文件;
- 获取图片文件名称中的数字;
- 对数字排序;
- 返回排序后的图片文件名称列表。
2. 获取所有图片文件名称
2.1 代码实现分析
- 使用 os.listdir 获取文件夹下的所有文件名称;
- 使用 for in 依次获取列表中的文件名称;
- 获取文件名称的后缀;
- 判断该文件是否是图片文件;
- 是图片文件就将文件名称放入图片名称列表;
- 返回汇总后的图片名称列表。
2.2 代码实现
import os
# 获取文件夹中的所有图片文件
def get_all_image_name(path):
names = os.listdir(path)
images = []
for name in names:
suffix = name.split('.').pop()
if suffix in ['jpg', 'png', 'jpeg', 'bmp']:
images.append(name)
return images
if __name__ == "__main__":
image_names = get_all_image_name('./images')
print('image_names:',image_names)
2.3 输出结果

3. 获取排序后的文件名称列表
3.1 获取文件名称中的数字
import os
import re
# 获取文件夹中的所有图片文件
def get_all_image_name(path):
names = os.listdir(path)
images = []
for name in names:
suffix = name.split('.').pop()
if suffix in ['jpg', 'png', 'jpeg', 'bmp']:
images.append(name)
return images
# 获取排序后的文件名称
def sort_names(names):
for name in names:
print(int(re.sub('\D', '', name)))
if __name__ == "__main__":
image_names = get_all_image_name('./images')
print('image_names:',image_names)
sort_names(image_names)
3.2 输出结果

3.3 多次循环实现名称排序
import os
import re
# 获取文件夹中的所有图片文件
def get_all_image_name(path):
names = os.listdir(path)
images = []
for name in names:
suffix = name.split('.').pop()
if suffix in ['jpg', 'png', 'jpeg', 'bmp']:
images.append(name)
return images
# 获取排序后的文件名称
def sort_names(names):
nums = []
for name in names:
nums.append(int(re.sub('\D', '', name)))
# 排序
nums.sort()
last_names = []
for num in nums:
for name in names:
if num == int(re.sub('\D', '', name)):
last_names.append(name)
return last_names
if __name__ == "__main__":
image_names = get_all_image_name('./images')
print('image_names:',image_names)
sort_images = sort_names(image_names)
print('sort_images:',sort_images)
3.4 输出结果

3.5 使用 sorted 配合 lambda 实现
import os
import re
def get_all_image_name(path):
names = os.listdir(path)
images = []
for name in names:
suffix = name.split('.').pop()
if suffix in ['jpg', 'png', 'jpeg', 'bmp']:
images.append(name)
return images
def sort_names(names):
last_names = list(sorted(names, key=lambda x:(int(re.sub('\D', '', x)),x)))
return last_names
if __name__ == "__main__":
image_names = get_all_image_name('./images')
print('image_names:',image_names)
sort_images = sort_names(image_names)
print('sort_images:',sort_images)
3.6 输出结果

4. 注意
- 使用 os 模块获取所有的文件名称;
- 使用 re 获取文件名称中的数字;
- 使用 sorted 对文件名称排序。