#!/usr/bin/env python
# -*- coding: cp936 -*-

"""

用于批量转换特定目录下所有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下需要将原来的字符编码格式转换为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)

转载于:https://www.cnblogs.com/hainange/archive/2005/10/27/6153736.html

转换mp3名称的小程序相关推荐

  1. 简洁UI好玩的文字转换emoji表情微信小程序支持句子词语转换_源码

    介绍: 支持自定义文字输入,支持随机切换,支持句子转换: 用emoji来做暗语啥的是不是很刺激,反正至于怎么玩就看各位的脑洞了~~ 这款小程序安装方法简单,无需服务器域名与合法域名!! 直接使用微信开 ...

  2. flv转为mp3 的python小程序

    FLV格式文件转换为MP3格式文件的python运行程序 一:前提 FLV格式的文件是当前互联网比较常用的视频播放文件格式 最近在下载得到一些flv文件之后,想将它转换为更加方便的mp3格式文件.最开 ...

  3. 万能的ogg转换mp3格式的小技巧

    ogg格式是压缩格式,和MP3比起来,他们的形式是相似的,这种格式有一个非常好的好处就是免费并且没有专利限制,相信对需要这种格式的人说是非常有利的,但是凡事都是有利有弊的,它有好处那必然也会有不好的一 ...

  4. 万能的ogg转换mp3格式的小技巧 1

    ogg格式是压缩格式,和MP3比起来,他们的形式是相似的,这种格式有一个非常好的好处就是免费并且没有专利限制,相信对需要这种格式的人说是非常有利的,但是凡事都是有利有弊的,它有好处那必然也会有不好的一 ...

  5. java 微信时间戳转换工具_微信小程序实现时间戳格式转换

    有时候我们会遇到,后台返回的时间是时间戳的形式,需要进行格式转换,如下: 两种形式: 1.封装好的 js,外部引入. 2.在需要的 js 文件中,封装单独函数. 一.封装好的 js,外部引入. 1.如 ...

  6. 如何将docx文本转换成使用微信小程序rich-text能编译的格式

    文章目录 首先用wps打开文件,如果**有批注**先删除批注 将文件保存未html格式 删除多余代码 通过脚本生成目标文件 首先用wps打开文件,如果有批注先删除批注 选中其他一条批注,然后点击审阅 ...

  7. 公众号和小程序可以同名了 名称支持同主体复用

    公众号和小程序不能同名?现在可以了!以前,小程序的名称不能和现有的公众号同名,现在支持同主体的情况下,小程序和公众号可以同名了.公众号.小程序在名称唯一的前提下,支持同主体的公众号与小程序名称复用. ...

  8. 百度网盘小程序互转工具:wx2正式开源!

    " 2020年11月,百度网盘小程序互转工具WX2,正式开源!" wx2是一个小程序的转换工具,它可以一键将原生的微信小程序转化成百度小程序.作为一种轻量级小程序跨宿主解决方案,w ...

  9. python组件化软件github_GitHub - 872409/wepy: 小程序组件化开发框架

    小程序框架wepy文档 扫码加入体验交流群. 快速入门 项目创建与使用 安装wepy 以下安装都通过npm安装 安装 wepy 命令行工具. npm install wepy-cli -g 在开发目录 ...

最新文章

  1. 图形显卡_显卡缺货?专业图形卡主机方案演示,Quadro P2200
  2. qt vs 不出来dos窗口_VS嵌入QT后,建立QT工程后printf和cout无效,无法产生控制台应用程序窗口,需设置工程属性...
  3. C++之struct构造函数(2010-10-19 15:04:47)
  4. Hyperledger Fabric 1.0 实战开发系列 第⑤课 fabric 证书解析
  5. pm2集群模式mysql配置_配置 PM2 一键部署
  6. 自己常用的Linux命令总结
  7. 基于JAVA+SpringMVC+MYSQL的简单企业人事管理系统
  8. 怎样得到对方的电脑名_吸引力法则让他想念你,让对方主动找你
  9. HTML案例登录页面
  10. 手机自动签到简易应用
  11. Matlab自编函数实现Sobel边缘检测
  12. IP城域网域内组播功能测试
  13. 微信小程序开发教程+工具插件
  14. 其实,以前都没发现------网易公开课
  15. Flutter时间日期格式化等操作(一个月的最后一天日期,时间段内所有日期...)
  16. Kalman滤波器参数分析
  17. 谢惠民,恽自求,易法槐,钱定边编数学分析习题课讲义23.2.3练习题参考解答[来自陶哲轩小弟]...
  18. 有哪些好的3D建模软件,最近对3D建模很感兴趣?
  19. dellr420部署os_Dell R420服务器手动安装centos7系统系列问题
  20. 985高校博士因文言文致谢走红!导师评价其不仅SCI写得好...

热门文章

  1. 健康检测文件httpchk.jsp
  2. 从微软的DBML文件中我们能学到什么(它告诉了我们什么是微软的重中之重)~四 分部方法从另一方面定义了类型的操作规范...
  3. resteasy经验谈
  4. TestNg依赖详解(三)------灵活的文件配置依赖
  5. [python]使用virtualenv处理python版本问题
  6. git show HEAD^num和个git show HEAD~num的区别
  7. RTX Server SDK跨服务器
  8. Ubuntu12.04 Jdk1.7 Tomct7.0部署配置
  9. Java学习进度(2013.03.13)—Struts2学习一
  10. kibana7.10.1基本操作(饼图+直方图)