Я пытаюсь переименовать много музыкальных файлов. Файлы содержат пробелы и прописные буквы и этажерку, и я хочу заменить пробелы символами нижнего подчеркивания и удалить все прописные буквы. Существует ли способ сделать это? Я видел изменяющиеся расширения и несколько имен файлов, которые являются почти идентичным сохранением для нескольких букв или измененных чисел, но ничто как то, в чем я нуждаюсь.
Маленький сценарий Python сделает переименование рекурсивно:
#!/usr/bin/env python3
import os
import shutil
import sys
directory = sys.argv[1]
for root, dirs, files in os.walk(directory):
for f in files:
new_f = root+"/"+f.replace(" ", "_").lower()
f = root+"/"+f
if f != new_f:
shutil.move(f, new_f)
где:
lower()
понизит все возможные прописные буквы.replace(" ", "_")
заменит пробелы символами нижнего подчеркивания.if f != new_f
только переименует файлы, если это будет на самом деле необходимо.shutil.move(f, new_f)
на самом деле переименует файл.rename.py
Выполните его с целенаправленным каталогом как аргумент:
python3 /path/to/rename.py <directory>
(Если Вы уже начали переименовывать вручную, например), Использование версия ниже.
#!/usr/bin/env python3
import os
import shutil
import sys
directory = sys.argv[1]
for root, dirs, files in os.walk(directory):
for f in files:
renamed = f.replace(" ", "_").lower() ;new_f = root+"/"+renamed
old_f = root+"/"+f
if old_f != new_f:
n = 1
while os.path.exists(new_f):
new_f = root+"/dupe_"+str(n)+"_"+renamed
n = n+1
shutil.move(old_f, new_f)
Это будет renane:
в:
Сценарий выше переименует файлы. Из комментария я понимаю, что требуется переименовать папки аналогично. Со всего несколькими строками, которые могут быть сделаны:
#!/usr/bin/env python3
import os
import shutil
import sys
directory = sys.argv[1]
def name_edit(item, root):
renamed = item.replace(" ", "_").lower() ;new_item = root+"/"+renamed
old_item = root+"/"+item
if old_item != new_item:
n = 1
while os.path.exists(new_item):
new_item = root+"/dupe_"+str(n)+"_"+renamed
n = n+1
shutil.move(old_item, new_item)
for root, dirs, files in os.walk(directory):
for item in files:
name_edit(item, root)
for item in dirs:
name_edit(item, root)
Во втором сценарии способ, которым были переименованы файлы, преобразовывается в функцию, для предотвращения написания того же кода дважды (выполняющий его на обоих файлах/папках). Впоследствии, сценарий сначала переименовывает файлы, затем папки рекурсивно:
#!/usr/bin/env python3
import os
import shutil
import sys
directory = sys.argv[1]
def name_edit(item, root):
# in one command, both replace spaces and lower {possible} capitals
renamed = item.replace(" ", "_").lower()
# combine directory and (new) file- or folder name
new_item = root+"/"+renamed
# combine directory and (old) file- or folder name
old_item = root+"/"+item
# if the name was changed, check for possible existing dupes
# and rename until the name is unique
if old_item != new_item:
n = 1
while os.path.exists(new_item):
new_item = root+"/dupe_"+str(n)+"_"+renamed
n = n+1
# if the file or folder name was changed, apply the change
shutil.move(old_item, new_item)
for root, dirs, files in os.walk(directory):
# use os.walk() to find files and folders recursively
for item in files:
name_edit(item, root)
for item in dirs:
name_edit(item, root)