Форум сайта python.su
Мне нужно получить отладочный вывод (например в JSON) всех имеющихся тэгов id3 из файла.
Не подскажете, как это сделать?
Тэги считываются из eyed3.id3.tag, но это свойство не является перечисляемым и я не могу использовать for.
Если обращаться к eyed3.id3.tag.__dict__, то получаю служебные свойства, которые нельзя сериализовать.
В идеале я бы хотел получить название свойства (как оно указано в eyed3.id3.tag), код атрибута id3 (например XDOR для поля original_release_date) и значение атрибута (в том числе если оно в нескольких фреймах).
Вот, собственно, сами фреймы: https://eyed3.readthedocs.io/en/latest/_modules/eyed3/id3/frames.html
Их можно перебрать в eyed3.id3.frames.
Но не могу понять, как получить из них значения и сопоставить с названиями свойств.
Отредактировано alibek (Авг. 15, 2023 20:24:48)
Офлайн
alibekТак ты составь сначала словарь, а потом его переведи в JSON.
Мне нужно получить отладочный вывод (например в JSON) всех имеющихся тэгов id3 из файла.
Не подскажете, как это сделать?
Тэги считываются из eyed3.id3.tag, но это свойство не является перечисляемым и я не могу использовать for.
#!/usr/bin/env python3 import eyed3 import json mp3file = eyed3.load('file.mp3') dct = {} for frame in mp3file.tag.frameiter(): dct[frame.id.decode('latin1')] = frame.text out = json.dumps(dct) print(out)
[guest@localhost mp3tags]$ ./mp3tags.py
{"COMM": "https://vk.com/the.zeus", "TALB": "https://vk.com/the.zeus", "TIT2": "The Power (Jump & Hide Remix)", "TPE1": "Snap"}
[guest@localhost mp3tags]$
>>> import eyed3 >>> >>> mp3file = eyed3.load('file.mp3') >>> >>> help(mp3file) >>> >>> mp3file.tag <eyed3.id3.tag.Tag object at 0x7f45adcbdfd0> >>> >>> help(mp3file.tag) >>> >>> mp3file.tag.frameiter() <generator object Tag.frameiter at 0x7f45aa89d9e8> >>> >>> frame = next(_) >>> >>> frame <eyed3.id3.frames.CommentFrame object at 0x7f45aa839080> >>> >>> help(frame) >>> >>> frame.header <eyed3.id3.headers.FrameHeader object at 0x7f45aa8390f0> >>> >>> help(frame.header) >>> >>> dir(frame.header) ['COMPRESSED', 'DATA_LEN', 'ENCRYPTED', 'FILE_ALTER', 'GROUPED', 'READ_ONLY', 'TAG_ALTER', 'UNSYNC', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_flags', '_isValidFrameId', '_parse2_2', '_setBitMask', '_version', 'compressed', 'copyFlags', 'data_length_indicator', 'data_size', 'encrypted', 'file_alter', 'grouped', 'id', 'major_version', 'minor_version', 'parse', 'read_only', 'render', 'size', 'tag_alter', 'unsync', 'version'] >>> >>> frame.header.id b'COMM' >>> >>> frame.id b'COMM' >>>
Отредактировано py.user.next (Авг. 16, 2023 03:14:09)
Офлайн
py.user.nextЧто подразумевается под словарем?
Так ты составь сначала словарь, а потом его переведи в JSON.
ID3_FRAMES = [ ... [b"TALB", "album" , "Album/Movie/Show title"], [b"TIT1", None , "Content group description"], [b"TIT2", "title" , "Title/songname/content description"], [b"TIT3", "subtitle" , "Subtitle/Description refinement"], ... ]
py.user.nextСпасибо за пример.
Ничего вумного, я просто использовал функцию help() и dir()
Офлайн
alibek
Что подразумевается под словарем?
alibekВ этом eyed3 нихера нет, это просто какой-то базовый уровень разбора тегов, весь этот модуль.
Но по идее, это сопоставление в модуле eyed3 и так уже есть, я думал использовать соответствующее свойство или метод eyed3.
alibekЕсли чего-то нет, сделай это сам. Но правда ты сам делать ничего не умеешь, поэтому ты ищешь, где бы тебе принесли это на блюдечке с голубой каёмочкой. А чтобы самому уметь что-то делать, надо брать и руками своими что-то делать постоянно. И потом вот оно и начнёт получаться.
Это не совсем то, потому что мне нужно использовать свойства из .tag, а не “сырые” данные из фреймов, которые нужно еще декодировать.
Отредактировано py.user.next (Авг. 17, 2023 02:59:42)
Офлайн
Вы так страшно напрягаетесь, стараясь рассказать о программировании.
Не напрягайтесь, это плохо на здоровье и психике сказывается.
Можете далее меня игнорировать, я разрешаю.
Офлайн
Скажи спасибо, что тебе говорят правду в лицо, а не восторгаются тем, какой ты умный и гениальный. К счастью, тебе повезло, ты не форуме бухгалтерш оказался, где все будут только восторгаться твоей тупизной только потому, что все они ещё тупее тебя раз в десять. Здесь твоя ахинея про то, какой ты гений, просто не прокатит.
Зачем тебе думать, что ты очень умный? Ведь это, наоборот, мешает тебе всё узнавать. Какую-то ахинею пишешь, а потом сидишь и сам себя радуешь такой мантрой “ох! как же я умён!”. Это же тупость натуральная. И в итоге ты остаёшься на уровне какого-то недоразвитого ушлепана. Как ты научишься чему-то новому, если ты якобы всё умеешь?
Так что не надо тут обижаться. Спасибо скажи!
Офлайн