对于给定的 (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
我有一个名为 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