Wednesday, August 22, 2007

Переименование файлов из одной маски в другую в python

Для копирования файлов понадобилось переименовывать их из одной маски в другую, например нужно скопировать все файлы по маске 02bh*.* с переименовыванием в маску bh02*.*.
Не найдя такой функции, написал сам:

def maskrename(msk1, msk2, filename):
"rename filname from file mask msk1 to file mask msk2"
import re
trmsk = lambda msk, grc: (('\%i' % grc)+trmsk(msk[1:], grc+1) if msk[0] in '*?' else (msk[0]+trmsk(msk[1:], grc))) if msk else ""
myfntrans = lambda msk: "(?i)"+msk.replace(".", "\.").replace("*", "(.*)").replace("?", "(.)") + "$"
return re.sub(myfntrans(msk1), trmsk(msk2, 1), filename)


Test:
print maskrename("02bh*.*", "bh02*.*", "02BH1908.er8")

Требуется python версии 2.5 и выше.