Assume you have these files:
$ cd test
$ touch file{1..25}.txt
$ ls
file1.txt file14.txt file19.txt file23.txt file5.txt
file10.txt file15.txt file2.txt file24.txt file6.txt
file11.txt file16.txt file20.txt file25.txt file7.txt
file12.txt file17.txt file21.txt file3.txt file8.txt
file13.txt file18.txt file22.txt file4.txt file9.txt
You can use glob to match the grand pattern of file[numers].txt
:
import glob
import os
import re
os.chdir('/Users/andrew/test')
print glob.glob('file[0-9]*.txt')
# ['file1.txt', 'file10.txt', 'file11.txt', 'file12.txt', 'file13.txt', 'file14.txt', 'file15.txt', 'file16.txt', 'file17.txt', 'file18.txt', 'file19.txt', 'file2.txt', 'file20.txt', 'file21.txt', 'file22.txt', 'file23.txt', 'file24.txt', 'file25.txt', 'file3.txt', 'file4.txt', 'file5.txt', 'file6.txt', 'file7.txt', 'file8.txt', 'file9.txt']
Then use a list comprehension with regex to narrow that list:
def expand(x,lo=0,hi=sys.maxint):
return lo<=int(re.search(r'\d+', x).group(0))<=hi
print [e for e in glob.glob('file[0-9]*.txt') if expand(e, 8,12)]
# ['file10.txt', 'file11.txt', 'file12.txt', 'file8.txt', 'file9.txt']
Or use filter:
print filter(lambda x: expand(x, 9, 12), glob.glob('file[0-9]*.txt'))
# ['file10.txt', 'file11.txt', 'file12.txt', 'file9.txt']