Очень просто работает:
Сначала я задаю кодировки и словари для замены нерусских букв на русские
encodings=['ansi','ascii','UTF-8', 'cp1251', 'koi-8r']
Общий словарь:
dict_eng_rus={'a':'а','b':'б','v':'в','g':'г','d':'д','e':'е','zh':'ж','z':'з','i':'и','k':'к','l':'л','m':'м','n':'н','o':'о','p':'п','r':'р','s':'с','t':'т','u':'у','f':'ф','h':'х','c':'ц','ch':'ч','sh':'ш','sch':'щ','w':'щ','iy':'ы','\'':'ь','ju':'ю','ja':'я','A':'А','B':'Б','V':'В','G':'Г','D':'Д','E':'Е','Zh':'Ж','Z':'З','I':'И','K':'К','L':'Л','M':'М','N':'Н','O':'О','P':'П','R':'Р','S':'С','T':'Т','U':'У','F':'Ф','H':'Х','C':'Ц','Ch':'Ч','Sh':'Ш','Sch':'Щ','Iy':'Ы','Ju':'Ю','Ja':'Я'}
словарь дифтонгов - распознает буквы, которых нет в английском, и которые обозначаются сочетаниями двух-трех английских букв
diftong_eng_rus={'zh':'ж','ch':'ч','sh':'ш','sch':'щ','je':'е','jo':'ё','yo':'ё','yu':'ю','ya':'я','ju':'ю','ja':'я','Io':'Ё','Ch':'Ч','Sh':'Ш','Sch':'Щ','W':'Щ','Yu':'Ю','Ya':'Я','Ju':'Ю','Ja':'Я'}
2 мини-словаря для распознавания окончаний и букв Ы и Й
ycukeng_eng_rus={'j':'й','y':'ы'}
iy_eng_rus={'iy':'ый','yj':'ый'}
Я передаю список имен файлов, обнаруженных подпрограммой dir_list, и список кодировок в подпрограмму translit
def translit(filenames, encodings):
i=0
extension=''
print 'Transliteration:'
for files in filenames: #перебираю список имен по одному
name=filenames[i]
oldname=name #запоминаю старое имя
#testname=os.path.isfile(name); print name, testname
print '+',
#if os.path.isfile(name):
name, extension=os.path.splitext(name) #разделяю на имя и расширение
#print name, extension
for items in diftong_eng_rus: # прохожу по имени методом string.replace 4 раза последовательно, подставляя буквы:
try:
name=string.replace(name, items, diftong_eng_rus[items]) # сначала из словаря дифтонгов - нахожу таким образом буквы ж, ш, щ
except:
pass
for items in iy_eng_rus:
try:
name=string.replace(name, items, iy_eng_rus[items]) # потом нахожу окончание "ый" в разных вариантах написания - оно очень проблемное оказалось
except:
pass
for items in ycukeng_eng_rus:
try:
name=string.replace(name, items, ycukeng_eng_rus[items]) # повторно ищу одиночные буквы Ы и Й
except:
pass
for items in dict_eng_rus:
name=string.replace(name, items, dict_eng_rus[items]) # И окончательно заменяю все остальные буквы
name=name+extension
oldname=os.path.join(fromdir, oldname); name=os.path.join(fromdir, name) # приделываю расширение к новому имени
os.rename(oldname, name) # переименовываю системной процедурой переименования
#print oldname
#print name
i=i+1
print '\n'
print i, 'files transliterated'