Регулярные выражения подойдут. Можно примерно так:
import re
def inc_file_number(name, value=1, re_number=re.compile("(\d+)(?=[^\d]*$)")):
def replacement(m):
number_string = m.group(1)
fmt = "%%.%dd" % len(number_string)
return fmt % (int(number_string) + value)
return re_number.sub(replacement, name)
names = ["1file_1.txt", "asdf_03.avi", "qwer_015.dat", "3file_01.txt"]
for name in names:
print name, inc_file_number(name)
alexeyvanzhula
скорость выполнения критична.
Если файлов действительно много, и у них одинаковый паттерн, можно упростить и ускорить функцию:
def inc_file_number2(name, value=1, re_number=re.compile("(\d\d)(?=[^\d]*$)")):
return re_number.sub(lambda m: "%.2d" % (int(m.group(1)) + value), name)
upd: поздно заметил.
alexeyvanzhula
Имя file может быть любое и не обязательно с номером и необязательно с расширением.
Тогда нужно проверить, есть ли номер, если есть увеличить, если нет добавить, предварительно разбив имя и расширение (при необходимости).