首页 > 解决方案 > 在 python 中使用 glob 剪切出一系列文件

问题描述

我有一个目录,其中包含img-0001.jpg, img-0005.pg, img-0006.jpg, ... , img-xxxx.jpg. 我需要做的是得到一个所有文件的列表0238,从字面上看img-0238.jpg。下一个现有文件名是img-0240.jpg

现在我使用 glob 来获取所有文件名。

list_images = glob.glob(path_images + "*.jpg")

提前致谢

编辑:

-> 最后一个文件名是img-0315.jpg

标签: pythonfilterfilenamesglob

解决方案


Glob 不允许正则表达式过滤。但是您在收到所有匹配文件后立即过滤列表。这是使用的样子re

import re

list_images = [f for f in glob.glob(path_images + "*.jpg") \
    if re.search(r'[1-9]\d{3,}|0[3-9]\d{2,}|02[4-9]\d|023[8-9]\.jpg$', f)]

带有验证文件的正则表达式以大于或等于 4 位的数字结尾0238

您可以使用https://regex101.com/使用正则表达式

基本上,我们检查数字是否为:

  • 1以任何3数字开头
  • 0[3-9]或以任何2数字开头
  • 或以02[4-9]任何1数字开头
  • or 以 or 开头,023后跟8or 9

但是做简单的比较可能会更容易:

list_images = [f for f in glob.glob(path_images + "*.jpg") \
     if f[-8:-4] > "0237" and f[-8:-4] < "0316"]

推荐阅读