python ---- Sort by numbers in file names

1. Demand analysis

  1. Get all file names in a folder;
  2. Filter all image files in the file name;
  3. Get the number in the image file name;
  4. sort the numbers;
  5. Returns a sorted list of image file names.

2. Get all image file names

2.1 Code implementation analysis

  1. Use os.listdir to get all file names under the folder;
  2. Use for in to obtain the file names in the list in turn;
  3. Get the suffix of the file name;
  4. Determine whether the file is an image file;
  5. If it is a picture file, put the file name into the picture name list;
  6. Returns a list of summarized image names.

2.2 Code implementation

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 Output result

Enter a picture description

3. Get the sorted list of file names

3.1 Get the number in the file name

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 Output result

Enter a picture description

3.3 multiple loops to achieve name sorting

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 Output result

Enter a picture description

3.5 Use sorted with lambda to achieve

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 Output result

Enter a picture description

4. Attention

  1. Use the os module to get all file names;
  2. Use re to get numbers in filenames;
  3. Use sorted to sort the file names.

Guess you like

Origin blog.csdn.net/m0_38082783/article/details/131478213