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 и выше.

Wednesday, February 28, 2007

Расчет вхождений символа в ячейке Excel

Сегодня знакомый спопросил как в Excel вывести в соседней ячейке число вхождений некоторого символа в строке другой ячейки. Почитав документацию с удивлением обнаружил отсутствие такой функции в Excel 2003. Поиск в google'е (Извлечение чисел из строки) натолкнул на написание своей функции.

Засучив рукава, через несколько минут раздумий и проб наваял вот такую конструкцию:

=СУММ(ЕСЛИ(ПСТР(A1;ЕСЛИ(ЕНД(СТРОКА($1:$300)
);"";СТРОКА($1:$300));1)="s";1;0))


Вычисляет количество вхождений символа "s" в ячейке A1. Максимальное количество символов в ячейке 300.
Вставлять формулу в ячейку комбинацией Ctrl-Shift-Enter (а не Enter как обычно).