Python修改Mp3文件名称

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

ContractedBlock.gif ExpandedBlockStart.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数据段中,所以这里再给一个直接写入信息到这个数据段中。代码:

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
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')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值