从网上下载的MP3文件,其文件名通常是不规则的,比如一些数字的组合。而MP3文件的元数据,比如歌曲名称,歌手名称,专辑名称等,都存放在其ID3标签中。
我使用ID3 Tagging in Python 来读取MP3文件的ID3标签。做了一点小小的修改,原来的实现在读取MP3文件之后没有关闭该文件,导致无法重命名,我增加了关闭文件的一行代码。
具体的重命名的代码如下:
python 代码
- import os
- from ID3 import *
- #path="../testfiles/002"
- path = 'C:\\TDDownload\Musictest'
- ACCEPTED_FILE_EXTENSIONS = (".mp3")
- def get_file_extension(filename) :
- return os.path.splitext(filename)[1].strip().lower()
- def is_acceptable_file(filename) :
- if (filename) :
- return get_file_extension(filename) in ACCEPTED_FILE_EXTENSIONS
- return 0
- def main() :
- renames = {}
- for root, dirs, files in os.walk(path) :
- for filename in files :
- if is_acceptable_file(filename) :
- extension = get_file_extension(filename)
- try:
- id3info = ID3(os.path.join(root, filename))
- title = id3info.title
- if (title.strip() != '' and not renames.has_key(title)) :
- renames[title] = (os.path.join(root, filename), os.path.join(root, title + extension))
- else :
- print "Skip file %s " % os.path.join(root, filename)
- except InvalidTagError, message:
- print 'Invalid ID3 tag:', message
- for src, target in renames.values() :
- print '*' * 3, "Rename file %s to %s " % (src, target), '*' * 3
- try :
- os.rename(src, target)
- except :
- print "Error occurs when renaming file %s " % src
- if __name__ == '__main__' :
- main()
其输出如下:
*** Rename file ../testfiles/002\10001079.mp3 to ../testfiles/002\隐形的翅膀.mp3 ***
*** Rename file ../testfiles/002\200611294126.mp3 to ../testfiles/002\眼泪成诗.mp3 ***
*** Rename file ../testfiles/002\20070610190627.mp3 to ../testfiles/002\离歌.mp3 ***