Я пытаюсь переименовать имена файлов мультимедиа на основе метаданных.
Формат имени файла song name - artist name
import os
from tinytag import TinyTag
import re
for root, dirs, files in os.walk("C:/Users/username/Desktop/Music/"):
for name in files:
tag = TinyTag.get(root + "\\" + name)
if tag.artist != "":
if name.endswith((".mp3",".m4a")):
# try:
file_ext = os.path.splitext(name)[-1]
old_name = os.path.join(root, name)
new_name = re.sub(' +', ' ', os.path.join(root, tag.title + " - " + tag.artist + file_ext))
print(new_name)
os.rename(old_name, new_name)
# except:
# pass
Каждый файл работает, кроме Маленького Красного Корвета от Prince:
C:/Users/username/Desktop/Music/1973 - James Blunt.mp3
C:/Users/username/Desktop/Music/Little Red Corvette - Prince .mp3
Traceback (most recent call last):
File "C:/Users/username/PycharmProjects/Practice/editAudioFileNames.py", line 15, in <module>
os.rename(old_name, new_name)
ValueError: rename: embedded null character in dst
Что означает ошибка ValueError? Я заметил, что после Корвета есть дополнительное место. Я использовал re.sub
в своем коде, чтобы обрезать имена файлов.
Пока игнорируйте try, except
, потому что код работает с ним. Я мог бы изменить имя файла вручную, так как это единственное из 850 песен, но я хочу знать его для будущего понимания.
Кстати, это мой первый полезный код! Критика оптимизации приветствуется.