最近遇到这样一个需求:有一些音频文件,文件名比较乱,右键查看属性时,【详细信息】里的【标题】命名很详细规范,想以此作为文件名。通过网络搜索,发现以下python包可以满足需求:pymediainfo。一个应用案例:https://www.jianshu.com/p/4c115bd82774,该包的说明文档:https://pymediainfo.readthedocs.io/en/stable/。以下是本文开头问题的解决方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# -*- coding: utf-8 -*- import os import re import json from pymediainfo import MediaInfo path = r'D:\FILE_PATH' #获取该目录下所有文件,存入列表中 file_names = os.listdir(path) for file_name in file_names: # title默认为文件名 title = file_name #旧文件名全称(就是路径+文件名) old_path_name = path + '\\' + file_name # 仅对mp3文件提取标题信息 if 'mp3' in file_name: media_info = MediaInfo.parse(old_path_name) media_data = media_info.to_json() media_dict = json.loads(media_data) title = media_dict['tracks'][0]['title'] + '.mp3' #设置新文件名,形如“S3 #1XXXXXXXX.mp3” result = re.search('S\d\s#\d+.+mp3$', title) if result: newname = result.group() # 文件名中不能包含这些字符: \/:"*<>|? # 在集合内部,特殊字符将失去它们特殊的含义。例如,[(+*)]将匹配字符字面值'('、'+'、'*'或')'。 # 匹配字符"\"要写成"\\\\" newname = re.sub('[\\\\/:"*<>|?]', '', newname) new_path_name = path + '\\' + newname #用os模块中的rename方法对文件改名 os.rename(old_path_name, new_path_name) |
[......]