日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

转换mp3名称的小程序

發(fā)布時間:2023/12/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 转换mp3名称的小程序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
#!/usr/bin/env python
# -*- 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的格式,否則顯示亂碼

??????????? 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)

轉(zhuǎn)載于:https://www.cnblogs.com/hainange/archive/2005/10/27/6153736.html

總結(jié)

以上是生活随笔為你收集整理的转换mp3名称的小程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。