Важные вещи в первую очередь: единственная проблема в вашем коде - это преобразование из string
в bytearray
.Взглянув на исходный код mutagen
, в части, касающейся конкретно mp4
типа файла, есть строка, которая выглядит так:
...
if isinstance(x, bytes):
x = [x]
...
, где x
- это значение, которое выпоставка.Когда вышеуказанное условие выполнено, указанное вами значение вставляется в list
, который имеет метод " dunder len ", следовательно, может быть аргументом функции len
, которая, в свою очередь, будетне поднимать TypeError
при использовании в качестве аргумента.
Вы должны редактировать свой код только путем замены преобразования на bytearray
на преобразование в bytes
следующим образом:
from mutagen.id3 import ID3
from mutagen.mp4 import MP4
def set_isbn(filename, isbn):
if(filename.lower().endswith(".mp3")):
tags = ID3(filename)
tags.add(TXXX(encoding=3, desc=u'ISBN', text=str(isbn)))
tags.save(filename)
else:
tags = MP4(filename)
tags["----:TXXX:ISBN"] = bytes(isbn, 'UTF-8')
tags.save(filename)
Тогда вы избежите вышеприведенного исключения TypeError
.