2012-06-01 2 views
2

Я искал способ сканирования mp3 мета-данные вчера, и я нашел этот фрагмент кода в Интернетепитон удаления нежелательных символов после сканирования mp3 мета-данные

def getID3(filename): 
    fp = open(filename, 'r') 
    fp.seek(-128, 2) 
    fp.read(3) # TAG iniziale 
    title = fp.read(30) 
    artist = fp.read(30) 
    album = fp.read(30) 
    fp.close() 
    return {'title':title, 'artist':artist, 'album':album} 

это полностью работает, и все, кроме проблемы что каждый раз, когда я его использую, это --->\x00 < --- отображается в конце названия, альбома или исполнителя. Например;

>>> import getid as id 
>>> import os 
>>> music = 'D:/Muzic' 
>>> os.chdir(music) 
>>> meta = id.getID3('04 - Mayday Parade - Your Song.mp3') 
>>> meta 
{'album': 'Tales Told By Dead Friends\x00\x00\x00\x00', 'artist': 'Mayday Parade\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 'title': 'Your Song\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'} 

Кто-нибудь знает, как избавиться от него?

btw Это случается со всей музыкой, которую я в настоящее время пытался.

+2

Возможно лучший выбор: использовать существующие метаданные мечения библиотеки как мутаген, который уже обрабатывает все различные варианты метаданных, которые видны в дикой природе: http://code.google.com/p/mutagen/ – bgporter

+0

Нет Спасибо, мне просто нужны основы, такие как чтение названия, альбома или исполнителя ... Ничего сложного. –

ответ

4

Добавить rstrip('\x00') к линиям, где вы читаете файл:

fp.read(30).rstrip('\x00') 

Пример:

>>> 'abc\x00\x00\x00\x00'.rstrip('\x00') 
'abc' 
+0

один быстрый вопрос, прежде чем решить наилучший ответ. Ваш ответ и ответ Пэва почти такие же. кроме вашего сказать 'rstrip ('\ x00')', в то время как Pev говорит 'strip \ x00'', в чем разница? –

+1

'strip' полосы от начала и до конца строки, где' rstrip' просто удаляется из конца строки. Существует также 'lstrip', который просто удаляется с начала строки – GP89

+0

@Firetryer - если вы знаете, что будете снимать только с конца, лучше использовать' rstrip'. После этого код объясняет: «Я лишаю персонажей с конца». – eumiro

1

Вы читаете ширину заданного поля (30) и структура обивка поля с нулевым (\ x00).

Я думаю, вы можете просто использовать .strip ('\ x00'), например.

title = fp.read(30).strip('\x00') 
    artist = fp.read(30).strip('\x00') 
    album = fp.read(30).strip('\x00') 
Смежные вопросы