设为首页 收藏本站
查看: 1614|回复: 0

[经验分享] Python修改Mp3文件名称

[复制链接]

尚未签到

发表于 2015-4-20 10:58:29 | 显示全部楼层 |阅读模式
  网上下载的很多mp3歌曲,都是用的时间ID比如20091003003.mp3这样的方式作为歌曲名称的,非常混乱!下载后,经常需要修改mp3的名字。这里我发一个我以前用Python写的,专门用来修改那些网上下载的mp3歌曲后名称不正确时候,使用该函数,使用方法
ModifyMp3FileInfo(r'E:\音乐\12345.mp3'),就是字典与列表的用法!代码如下:
  

DSC0000.gif DSC0001.gif 代码



#!修改下载的Mp3文件名称为正确的Mp3文件
def ModifyMp3FileInfo(filename):   
     mp3Id3V1 = {
         "tag":{"valuepos":(0,3),"value":""},
         "SongName":{"valuepos":(3,33),"value":""},
         "SongPeople":{"valuepos":(33,63),"value":""},
         "Zj":{"valuepos":(63,93),"value":""},
         "Year":{"valuepos":(93,97),"value":""},
         "Bak":{"valuepos":(97,125),"value":""}
         }
     try:
         f = open(filename,'rb')
         f.seek(-128,2)
         sdata = f.read(3)
         if sdata == 'TAG':
             f.seek(-128,2)
             sdata = f.read(128)   
             for tag,subitem in mp3Id3V1.items():
                 subitem["value"] = sdata[subitem["valuepos"][0]:subitem["valuepos"]
[1]].replace('\00','').strip()
                 print '%s='%tag,'%s'%subitem["value"],'\n'   
             f.close()   
             import os
             if mp3Id3V1["SongName"]["value"]!='':
                 test = [os.path.dirname(filename),'\\']
                 test.append(mp3Id3V1["SongName"]["value"])
                 test.append('.mp3')
                 newfilename = ''.join(test)
                 print newfilename
                 if os.path.exists(newfilename):
                     test = ['Filename ',newfilename,' Has Existed']
                     print ''.join(test)
                 else:
                     try:
                         os.rename(filename,newfilename)
                     except WindowsError,e:
                         if e.winerror:
                             print 'Modify filename failed ,maybe the file is inuse'
                         else:
                             print 'UnKnown error'
         else:
             print 'Is not a MP3 file'
     except IOError:
         print 'Open file failed'

  


  但是上面这个代码只是针对,歌曲本身记录了mp3名字信息的才能够正确修改名字,但是某些时候文件中并没有记录这些信息,一般的这些数据信息都记录在MP3的的Id3V1数据段中,所以这里再给一个直接写入信息到这个数据段中。代码:
  

代码



writeMp3Header = {
     "SongName":"",
     "SongPeople":"",
     "ZhuanJi":"",
     "Year":"",
     "Bak":""
     }
def setMp3Header(mp3file):
     mp3Id3V1 = {        
         "SongName":-125,
         "SongPeople":-95,
         "ZhuanJi":-65,
         "Year":-35,
         "Bak":-31
         }
     tags = ['SongName','SongPeople','ZhuanJi','Bak']
     f = open(mp3file,'r+')
     try:
         f.seek(-128,2)
         try:
             tempstr = f.read(3)
             if tempstr == 'TAG':
                 for tag,startPos in mp3Id3V1.items():
                     if writeMp3Header[tag] != '':
                         f.seek(startPos,2)
                         if tag in tags:
                             if len(writeMp3Header[tag]) > 30:
                                 f.write(writeMp3Header[tag][:30])
                             else:
                                 f.write(writeMp3Header[tag])
                         print startPos,tag,writeMp3Header[tag]
             else:
                 print 'is not a mp3file'
         except IOError:
             print 'read error'
     finally:
         f.close()
使用方式:
  writeMp3Header[SongName] = '测试歌曲名称'
writeMp3Header[SongPeople] = '不得闲'
writeMp3Header[ZhuanJi] = '专辑'
writeMp3Header[Year] = '2009'
writeMp3Header[Bak] = '备注测试'
setMp3Header(r'E:\test.mp3')

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-58731-1-1.html 上篇帖子: 编写Tesseract的Python扩展 下篇帖子: Python: First Glimpse
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表