Что вы можете сделать, это предварительно скомпилировать RegEx перед его использованием. Вы можете поступить так:
import re
sub_name = re.compile(r"IMG_(\d{4})(\d{2})(\d{2})_(\d{2})(\d{2})(\d{2})", flags=re.I).sub
Здесь sub_name - это функция, которую вы можете использовать позже в цикле for
для замены имени каждого изображения.
Примечание. Игнорирование регистра (верхнего / нижнего регистра) может быть полезно в Windows, но вам также необходимо адаптировать вызов к glob.glob
.
Ниже приведено решение, использующее glob.glob
, но вы также можете использовать os.walk
для просмотра каталога, поиска по всем изображениям…
# coding: utf-8
import glob
import os
import re
import sys
sub_name = re.compile(r"IMG_(\d{4})(\d{2})(\d{2})_(\d{2})(\d{2})(\d{2})", flags=re.I).sub
work_dir = sys.argv[1]
for old_path in glob.glob(os.path.join(work_dir, "IMG_*.jpg")):
dirname, old_name = os.path.split(old_path)
new_name = sub_name("\\1-\\2-\\3_\\4_\\5_\\6", old_name)
new_path = os.path.join(dirname, new_name)
try:
os.rename(old_path, new_path)
except OSError as exc:
print(exc)
Я заметил, что вы используете оператор print
и синтаксис Python 2.6 для исключения. Предпочтительно использовать новый синтаксис.
Если вы используете Python 2.7, вы можете добавить директиву:
from __future__ import print_function
Поместите это в верхней части вашего импорта ...