对于给定的 (x,y) 范围,我如何 return 名称中包含 x、y 内数字的文件列表

For a given range of (x,y) how do I return the list of files with numbers within x, y in their name

我有一个名为 posture0 position 1 posture 2 等的文件列表,最多 4000 个。我想使用一个函数,它接受这个 运行ge 并给我它周围的文件模式。我尝试这个的原因我可能想获得某些 运行ges 的文件 (1-300),(2-219) 为了实现这个我到目前为止已经尝试了这些:

自动化正则表达式搜索模式。

我找到了自动进行模式搜索的模块 rgxg。对于 0-180,它生成了这个结果。

(180|1[0-7][0-9]|0?[0-9]{1,2})

这就是我的正则表达式。

posture+(180|1[0-7][0-9]|0[0-9]{1,2})+.jpg

这没有用,因为它应该得到像 posture0 和 posture180.jpg 这样的文件。虽然缺少 0-100,但它得到了它们,并且还用这个正则表达式找到了像 1000 这样的模式。

后来我 运行 这个模式在 python 代码上。

import re

rootdir = "postures"

regex = re.compile('posture+(180|1[0-7][0-9]|0[0-9]{1,2})+.jpg')

for root, dirs, files in os.walk(rootdir):
  for file in files:
    if regex.match(file):
       print(file)

它 returns 文件,但它也 returns 文件 0-1500,它不 return 0-99 之间的数字。

我也搜索了 glob,但似乎找不到这样的功能。

编辑:由于我收到的反馈是我的问题不是 clear.I 将尝试澄清它。

问题: 有没有办法在正则表达式中自动搜索字符串?我试过的那个对我来说效果不佳,因为我提到的案例没有被捕获。 谢谢:)

这是我认为您的问题的解决方案。它实现了一个函数,该函数接受一个目录路径、一个较低的值和一个较高的值,然后 returns 所有包含由较低值和较高值定义的范围内的数字的文件名。

import os
import re

def get_filenames_in_range(path_to_directory, lower_bound, upper_bound):
    files = []
    # Iterate through files in current directory
    for f in os.listdir(path_to_directory):
        # os.listdir captures directories as well as files
        # so filter just for files
        if os.path.isfile(f):
            # Perform a regex match for numbers
            match = re.findall(r'\d+', f)
            # If numbers are found, check whether they are within range
            if match:
                number = int(match[0])
                if number >= lower_bound and number <= upper_bound:
                    files.append(f)
    return files