使用Python读取和写入mp3文件的id3v1信息,pythonid3v1,#encoding=ut


#encoding=utf8__author__ ='[email protected]'import osimport structdef GetFiles(path):"""    读取指定目录的文件    """FileDic=[]    files=os.listdir(path)for f in files:        f=f[:-4]FileDic.append(f)returnFileDic,filesdef GetLast128K(path,file):    ff1=open(os.path.join(path,file),"rb")    ff1.seek(-128,2)    id3v1data=ff1.read()    ff1.close()return id3v1datadef GetAllBinData(path,file):    ff1=open(os.path.join(path,file),"rb")    data=ff1.read()    ff1.close()return datadef SetTag(path,file,title,artist,album,year,comment,genre):"""    设置mp3的ID3 v1中的部分参数    char Header[3]; /*标签头必须是"TAG"否则认为没有标签*/    char Title[30]; /*标题*/    char Artist[30]; /*作者*/    char Album[30]; /*专集*/    char Year[4]; /*出品年代*/    char Comment[30]; /*备注*/    char Genre; /*类型*/    mp3文件尾部128字节为id3v1的数据,如果有数据则读取修改,无数据则补充    """    header='TAG'#组合出最后128K的id3V1的数据内容    str =struct.pack('3s30s30s30s4s30ss',header,title,artist,album,year,comment,genre)#获取原始全部数据    data=_GetAllBinData(path,file)#获取末尾的128字节数据    id3v1data=_GetLast128K(path,file)#打开原文件准备写入    ff=open(os.path.join(path,file),"wb")try:#判断是否有id3v1数据if id3v1data[0:3]!=header:#倒数128字节不是以TAG开头的说明没有#按照id3v1的结构补充上去            ff.write(data+str)else:#有的情况下要换一下            ff.write(data[0:-128]+str)        ff.close()print"OK"+title    except:        ff.write(data)print"Error "+title    finally:        if ff :            ff.close()if __name__=="__main__":#我存放mp3文件的目录    path=u"K:\\\\reading\\\\阅读\\\\东吴相对论"#获取到文件名和文件全名    names,files=GetFiles(path)    #苦力代码    for i in range(len(files)):#注意编码解码        title=names[i].encode('gbk')        artist=u'梁冬 吴伯凡'.encode('gbk')        album=u'东吴相对论'.encode('gbk')        year=''        comment=''        genre=''#调用函数处理           SetTag(path,files[i],title,artist,album,year,comment,genre)#该片段来自于http://byrx.net

评论关闭