У меня есть папка с 12500 картинками. Имена файлов содержат числа, поэтому это выглядит так:
0.jpg
1.jpg
2.jpg
3.jpg
.
.
.12499.jpg
Теперь я хочу переместить файлы. Файлы с диапазоном 0-7999 должны быть скопированы в первую папку. Файлы 8000-9999 должны быть скопированы во вторую папку, а файлы с диапазоном 10000-12499 должны быть скопированы в третью папку.
Во-первых, я подумал, что могу легко использовать [0-7999] .jpg для первой папка, [8000-9999] .jpg для второго и [10000-12499] .jpg для третьего. Однако это не работает. Я вычислил следующий код, основываясь на известных мне подстановочных знаках? и *: следующий код действительно работает и выполняет задание (обратите внимание, что я закомментировал shutil.copy, вместо этого используйте print для проверки результата):
import glob
import shutil
dest_dir = "/tmp/folder1/"
for file in glob.glob('/tmp/source/?.jpg'):
#shutil.copy(file, dest_dir)
print(file)
dest_dir = "/tmp/folder1/"
for file in glob.glob('/tmp/source/??.jpg'):
#shutil.copy(file, dest_dir)
print(file)
dest_dir = "/tmp/folder1/"
for file in glob.glob('/tmp/source/???.jpg'):
#shutil.copy(file, dest_dir)
print(file)
dest_dir = "/tmp/folder1/"
for file in glob.glob('/tmp/source/[1-7]???.jpg'):
#shutil.copy(file, dest_dir)
print(file)
dest_dir = "/tmp/folder2/"
for file in glob.glob('/tmp/source/[8-9]???.jpg'):
#shutil.copy(file, dest_dir)
print(file)
dest_dir = "/tmp/folder3/"
for file in glob.glob('/tmp/source/?????.jpg'):
#shutil.copy(file, dest_dir)
print(file)
Однако я хотел бы иметь элегантное решение для этого. Я погуглил регулярное выражение с целым диапазоном и попробовал следующее:
dest_dir = "/tmp/folder3/"
for file in glob.glob('/tmp/source/\b([0-9]|[1-9][0-9]|[1-9][0-9][0-9]|1000).jpg'):
#shutil.copy(file, dest_dir)
print(file)
Это не работает. Так как же выглядит правильная реализация? Мне нужно решение как для shutil.copy, так и для shutil.move, но я думаю, что оно одинаково для обоих.