python ---- 根据文件名称中的数字排序

1. 需求分析

  1. 获取文件夹中的所有文件名称;
  2. 筛选所有文件名称中的图片文件;
  3. 获取图片文件名称中的数字;
  4. 对数字排序;
  5. 返回排序后的图片文件名称列表。

2. 获取所有图片文件名称

2.1 代码实现分析

  1. 使用 os.listdir 获取文件夹下的所有文件名称;
  2. 使用 for in 依次获取列表中的文件名称;
  3. 获取文件名称的后缀;
  4. 判断该文件是否是图片文件;
  5. 是图片文件就将文件名称放入图片名称列表;
  6. 返回汇总后的图片名称列表。

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. 注意

  1. 使用 os 模块获取所有的文件名称;
  2. 使用 re 获取文件名称中的数字;
  3. 使用 sorted 对文件名称排序。

猜你喜欢

转载自blog.csdn.net/m0_38082783/article/details/131478213
今日推荐