2015-06-25 2 views
1

Я делаю программу для редактирования тегов в mp3, используя Python, прямо сейчас я использую модуль мутагена и для того, чтобы вставлять изображение в качестве обложки в mp3-файл с использованием стандартов id3v4. Я должен добавить фрейм APIC using this.Что означает «данные необработанного изображения, как строка байтов»?

Но я не понимаю, что мне нужно внести в параметры encoding, mime и data.

Я посмотрел пример отсюда и пришел с этим:

frame= APIC(3,"image/jpg",3,"Cover",open("albumcover.jpg")) 

Но я не знаю, что первые 3 средства? Почему, когда я положил "utf-8", он не работает? А функция open() не работает, она возвращает ошибку, как это:

Traceback (most recent call last): 
    File "<pyshell#104>", line 1, in <module> 
    frame= APIC(3,"image/jpg",3,"Cover",open("albumcover.jpg")) 
    File "C:\Python34\lib\site-packages\mutagen\id3\_frames.py", line 65, in __init__ 
    setattr(self, checker.name, checker.validate(self, val)) 
    File "C:\Python34\lib\site-packages\mutagen\id3\_specs.py", line 184, in validate 
    raise TypeError("%s has to be bytes" % self.name) 
TypeError: data has to be bytes 

и когда я поставил "b"

frame= APIC(3,"image/jpg",3,"Cover",open("albumcover.jpg","b")) 

возвращает

Traceback (most recent call last): 
    File "<pyshell#106>", line 1, in <module> 
    frame= APIC("utf-8","image/jpg",3,"Cover",open("albumcover.jpg","b")) 
ValueError: Must have exactly one of create/read/write/append mode and at most one plus 

Так что я должен положить там?

И я пробовал open("albumcover.jpg").read() тоже, и он не работает.

+0

Ответ на проблему с байтом может быть [строка в байтовой проблеме, с которой я столкнулся с Python 3] - http://stackoverflow.com/questions/5440485/typeerror-post-data-should-be-bytes-or-an -iterable-of-bytes-it-can not-be-str – user2725012

ответ

0

Вам нужно открыть файл в любом из - read (гб) или write (ВБ) или append режимах (AB) (б - с указанием, что его двоичный файл, и что мы читаем байт из него вместо строк).

В вашем случае, я думаю, что режим read будет достаточно, так что попробуйте -

frame= APIC(3,"image/jpg",3,"Cover",open("albumcover.jpg","rb").read()) 

rb указывает на то, что нам нужно открыть файл в режиме чтения и что это двоичный файл, вызвав .read() функция на нем заставляет его читать байты из файла и возвращать его.

+0

спасибо, что сработали! – DestinyClouds

+0

Рад, что это сработало для вас, посоветует вам принять ответы, поскольку это поможет другим, у кого могут быть подобные проблемы, а также сообщество в целом (не только это, все вопросы). –

0

Параметр 3 означает, что это передняя обложка альбома, read the documentation.

+0

thats второй 3 я имею в виду первые 3, что делает первые 3? – DestinyClouds

Смежные вопросы