#!/usr/bin/env python# -*- coding: cp936 -*-"""用于批量转换特定目录下所有MP3名称(包括改目录下所有子目录),新名称格式:“演唱者-歌曲名称”。
Mp3文件格式:
at end of file - 128 bytesoffset type len name--------------------------------------------0 char 3 "TAG"3 char 30 title33 char 30 artist63 char 30 album93 char 4 year97 char 30 comments127 byte 1 genre--------------------------------------------"""import sys
import os
import os.path
class MP3INFO:
"""读取mp3文件中的演唱者和歌曲名称信息"""
def __init__(self, filename):
self.title = ''
self.artist = ''
f = file(filename,'rb')
f.seek(-128,2)
s=f.read(3)
if s == 'TAG':
# 判断是否是mp3文件 strlist = []
for i in (30,30):
s = f.read(i)
pos = s.find('\0')
if pos == 0:
s = ''
elif pos > 0:
s = s[0:pos]
strlist.append(s.strip())
self.title, self.artist = strlist
f.close()
def RenameMp3File(arg,dirname,names):
"""dirname: 目录名;names:目录下所有文件列表"""
for name in names:
filename = dirname + '/' + name
if os.path.isdir(filename) or name[-3:].lower() != 'mp3':
pass
#该文件如果是目录或不是.mp3文件,则什么也不作
else:
mp3 = MP3INFO(filename)
#拼装新的文件名
if mp3.title == '':
mp3filename = name
elif mp3.artist == '':
mp3filename = mp3.title + '.mp3'
else:
mp3filename = mp3.artist + ' - ' + mp3.title + '.mp3'
#消除新文件名中的非法字符
a = '\/:*?"<>|'
t = [ x for x in mp3filename if x not in a]
mp3filename = ''
for x in t:
mp3filename += x
#如果是在winxp下,无需判断字符编码
#linux下需要将原来的字符编码格式转换为UTF8的格式,否则显示乱码
codelist = ['gbk', 'hz', 'euc-tw', 'big5', 'gb18030', 'gb2312', \
'utf-8', 'utf-16', 'big5-hkscs','iso-2022-cn',\
'iso-2022-jp', 'iso-2022-kr', 'iso-8859-1']
#codelist = ['utf-8', 'gbk', 'big5', 'iso-8859-1']
for code in codelist:
try:
mp3filename = unicode(mp3filename, code)
mp3filename = mp3filename.encode('utf-8')
# Judge that mp3.title not empty, because destination # filename will be equal to source filename when mp3.title # is empty. If not, it will throw OSError: duplication of # filename when run 'os.rename(...)' if mp3.title != '' and mp3filename != name:
os.rename(filename, dirname + '/' + mp3filename)
print code, '---', filename, ' --> ', mp3filename
break
except OSError:
print 'duplication of name: ',filename
pass
except:
if code == codelist[-1]:
print code, '---', filename, ' ---', mp3filename
print "Unexpected error:", sys.exc_info()[0]
pass
if __name__ == '__main__':
p=r'/home/ljh/MyMusic'
if len(sys.argv) > 1:
p = sys.argv[1]
os.path.walk(p, RenameMp3File,0)
分享到:
相关推荐
AMR Player 是一款用户能够转换 AMR 文件的应用程序。...如果你想AMR转换成MP3格式,只需选择一个AMR文件,你增加了,点击“ AMR到MP3 ” ,输入一个MP3文件名称,免费程序可以转换您的 AMR 文件一次。
程序直接帮你把转换好的mp3文件输出(因为下一步–语音识别–需要.pcm格式的文件,程序自动执行格式转换,同时生成17k.pcm文件,暂时不用管,(你也可以通过修改默认参数改变文件输出的位置,名称及是否进行pcm转换 ...
实例189 利用Image制作小动画 274 5.4 媒体控制 275 实例190 检测是否安装声卡 275 实例191 打开和关闭CDROM 276 实例192 控制PC喇叭发声 277 实例193 获取显示设备的名称及PNPDeviceID 278 实例194 如何收听...
静态编译后的易语言可执行程序(exe)和动态链接库(dll),运行时不再依赖任何支持库文件,文件尺寸更小(相对以前的独立编译),PE结构更合理(取消了“易格式体”),加载速度更快,而且有效解决了“病毒误报”和...
实例189 利用Image制作小动画 274 5.4 媒体控制 275 实例190 检测是否安装声卡 275 实例191 打开和关闭CDROM 276 实例192 控制PC喇叭发声 277 实例193 获取显示设备的名称及PNPDeviceID 278 实例194 如何收听...
119 利用Image控件制作小动画 cc实例120 透明的Flash动画 cc实例121 播放GIF动画 cc实例122 播放AVI动画 cc实例123 播放VCD 4.2 制作与播放音频 cc实例124 可以选择播放曲目的CD播放器 cc实例125 MP3...
cc实例119 利用Image控件制作小动画 cc实例120 透明的Flash动画 cc实例121 播放GIF动画 cc实例122 播放AVI动画 cc实例123 播放VCD 4.2 制作与播放音频 cc实例124 可以选择播放曲目...
右击,选择“使用网际快车下载全部链接”,再在打开的窗口中单击下方“选择特定”按钮,在打开窗口中选中歌曲文件扩展名,如mp3、wma,接着单击窗口上方“名称”标签,这样尽可能让相同扩展名的文件排在一起(如所有...
cc实例119 利用Image控件制作小动画 cc实例120 透明的Flash动画 cc实例121 播放GIF动画 cc实例122 播放AVI动画 cc实例123 播放VCD 4.2 制作与播放音频 cc实例124 可以选择播放曲目...
实例189 利用Image制作小动画 274 5.4 媒体控制 275 实例190 检测是否安装声卡 275 实例191 打开和关闭CDROM 276 实例192 控制PC喇叭发声 277 实例193 获取显示设备的名称及PNPDeviceID 278 实例194 如何收听...
实例189 利用Image制作小动画 274 5.4 媒体控制 275 实例190 检测是否安装声卡 275 实例191 打开和关闭CDROM 276 实例192 控制PC喇叭发声 277 实例193 获取显示设备的名称及PNPDeviceID 278 实例194 如何收听...
0072 如何实现金额大小写转换的算法 46 0073 如何计算时钟的指针位置 47 0074 如何计算汉字笔划 48 0075 如何计算两个日期之间的天数、周数、分钟数 49 0076 如何实现数字斜塔 50 0077 如何实现杨辉三角...