Транслитерация имён файлов с Python

У меня есть похожая запись о транслитерации содержимого файла. Здесь же будут транслитерированы только имена файлов.

Если активно пользуешься терминалом, часто возникает желание убрать пробелы из имён файлов и иногда даже кириллицу.

Итак, перед нами стоит задача группового переименования файлов. Например, нужно поменять имена всех файлов в директории. Хотим избавиться от пробелов — заменить их на нижние подчёркивания. Все кириллические буквы хотим поменять на латинские (на «транслит»).

Вот скрипт, написанный на питоне, который совершает такое массовое переименование файлов. Надо создать файл renamer.py с приведённым ниже содержанием, положить его в папку с переименовываемыми файлами и выполнить:

user $python3 renamer.py -p

И в выводе программы будет показано, как будут переименованы файлы, но изменений не произойдёт. Если Вы окажетесь довольны результатами, сделайте на всякий случай резервную копию директории и выполните python3 renamer.py. За ключик -p спасибо комментарию от hombit’a.

Файл Русский Текст.TXT переименуется в russkiy_tekst.txt. Поведение скрипта благодаря его простоте очень легко подстроить под свои нужды, даже совсем не разбираясь в питоне. В строках с 13 по 82 в левом столбце в кавычках стоит то, что подлежит замене; в правом столбце — то, на что нужно заменять. Добавляйте свои замены и корректируйте существующие по своему усмотрению.

renamer.py

Скачать

#! /usr/bin/env python#coding=utf8import osfrom sys import argvdef latinizator(letter, dic): for i, j in dic.items(): letter = letter.replace(i, j) return letterlegend = {‘ ‘:’_’,’,’:»,’а’:’a’,’б’:’b’,’в’:’v’,’г’:’g’,’д’:’d’,’е’:’e’,’ё’:’yo’,’ж’:’zh’,’з’:’z’,’и’:’i’,’й’:’y’,’к’:’k’,’л’:’l’,’м’:’m’,’н’:’n’,’о’:’o’,’п’:’p’,’р’:’r’,’с’:’s’,’т’:’t’,’у’:’u’,’ф’:’f’,’х’:’h’,’ц’:’c’,’ч’:’ch’,’ш’:’sh’,’щ’:’shch’,’ъ’:’y’,’ы’:’y’,’ь’:»‘»,’э’:’e’,’ю’:’yu’,’я’:’ya’,’А’:’A’,’Б’:’B’,’В’:’V’,’Г’:’G’,’Д’:’D’,’Е’:’E’,’Ё’:’Yo’,’Ж’:’Zh’,’З’:’Z’,’И’:’I’,’Й’:’Y’,’К’:’K’,’Л’:’L’,’М’:’M’,’Н’:’N’,’О’:’O’,’П’:’P’,’Р’:’R’,’С’:’S’,’Т’:’T’,’У’:’U’,’Ф’:’F’,’Х’:’H’,’Ц’:’Ts’,’Ч’:’Ch’,’Ш’:’Sh’,’Щ’:’Shch’,’Ъ’:’Y’,’Ы’:’Y’,’Ь’:»‘»,’Э’:’E’,’Ю’:’Yu’,’Я’:’Ya’,}for file_old in os.listdir(‘.’): file_new = latinizator(file_old, legend)

#Раскомментируйте, чтобы сделать первую букву в имени файла Прописной

#file_new = file_new.capitalize() if ‘-p’ in argv: if file_old == file_new: print (‘{0: <30}’.format(file_old), ‘не будет переименован’ ) else: print (‘{0: <30}’.format(file_old), ‘будет переименован в ‘, file_new ) else: if file_old != file_new: print (‘{0: <30}’.format(file_old), ‘переименован в ‘, file_new ) os.rename(file_old, file_new)

P.S. Функцию для замены ключа словаря на его значение подсмотрел тут.