转换mp3名称的小程序
生活随笔
收集整理的這篇文章主要介紹了
转换mp3名称的小程序
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
#!/usr/bin/env python
# -*- coding: cp936 -*-
"""
at end of file - 128 bytes
offset? type? len?? name
--------------------------------------------
0?????? char? 3?????????????????? "TAG"
3?????? char? 30??? title
33????? char? 30??? artist
63????? char? 30??? album
93????? char? 4???? year
97????? char? 30??? comments
127???? byte? 1???? genre
--------------------------------------------
"""
import sys
import os
import os.path
class MP3INFO:
??????? 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'
??????????? t = [ x for x in mp3filename if x not in a]
??????????? mp3filename = ''
??????????? for x in t:
??????????????? mp3filename += x
???????????????????????? '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)
# -*- coding: cp936 -*-
"""
用于批量轉(zhuǎn)換特定目錄下所有MP3名稱(包括改目錄下所有子目錄),新名稱格式:“演唱者-歌曲名稱”。
Mp3文件格式:
at end of file - 128 bytes
offset? type? len?? name
--------------------------------------------
0?????? char? 3?????????????????? "TAG"
3?????? char? 30??? title
33????? char? 30??? artist
63????? char? 30??? album
93????? char? 4???? year
97????? char? 30??? comments
127???? 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下需要將原來的字符編碼格式轉(zhuǎn)換為UTF8的格式,否則顯示亂碼
???????????????????????? '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)
轉(zhuǎn)載于:https://www.cnblogs.com/hainange/archive/2005/10/27/6153736.html
總結(jié)
以上是生活随笔為你收集整理的转换mp3名称的小程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Modeling Our World 读
- 下一篇: Linux输入法的几点补充