希腊语MP3文件名转拉丁字符并精简信息的实现方案
解决MP3文件名精简问题:保留艺术家与标题核心信息
问题背景
已有一批含希腊字母的MP3文件,通过Python脚本完成了希腊字符到拉丁字符的转换,但需进一步精简文件名,仅保留艺术家 - 标题的核心格式。例如将Basilis Mpatis - Zimia _ Vasilis Mpatis - Zimia _ Official Video Clip HQ 2017.mp3处理为Basilis Mpatis - Zimia.mp3。
解决方案
核心思路
- 先完成希腊字符到拉丁字符的转换
- 从转换后的文件名中提取包含
艺术家-标题的有效片段 - 清理冗余字符,生成标准格式的文件名
修改后的完整Python脚本
import os # MP3文件所在目录 path = '/home/sakis/mp3' # 希腊字符到拉丁字符的映射表,替代原脚本的多次replace操作 greek_to_latin = { 'Ά': 'A', 'Έ': 'E', 'Ή': 'H', 'Ί': 'I', 'Ό': 'O', 'Ύ': 'Y', 'Ώ': 'W', 'ΐ': 'I', 'Α': 'A', 'Β': 'B', 'Γ': 'G', 'Δ': 'D', 'Ε': 'E', 'Ζ': 'Z', 'Η': 'H', 'Θ': 'TH', 'Ι': 'I', 'Κ': 'K', 'Λ': 'L', 'Μ': 'M', 'Ν': 'N', 'Ξ': 'X', 'Ο': 'O', 'Π': 'P', 'Ρ': 'R', 'Σ': 'S', 'Τ': 'T', 'Υ': 'Y', 'Φ': 'F', 'Χ': 'X', 'Ψ': 'PS', 'Ω': 'O', 'ά': 'a', 'έ': 'e', 'ή': 'i', 'ί': 'i', 'ό': 'o', 'ύ': 'y', 'ώ': 'w', 'ϊ': 'i', 'ϋ': 'u', 'α': 'a', 'β': 'b', 'γ': 'g', 'δ': 'd', 'ε': 'e', 'ζ': 'z', 'η': 'i', 'θ': 'th', 'ι': 'i', 'κ': 'k', 'λ': 'l', 'μ': 'm', 'ν': 'n', 'ξ': 'x', 'ο': 'o', 'π': 'p', 'ρ': 'r', 'ς': 's', 'σ': 's', 'τ': 't', 'υ': 'y', 'φ': 'f', 'χ': 'x', 'ψ': 'ps', 'ω': 'o' } for file in os.listdir(path): if file.endswith('.mp3'): old_name = file.encode('utf-8').decode('utf-8') name_part, ext = old_name.rsplit('.', 1) # 1. 希腊字符转拉丁字符 latin_name = ''.join([greek_to_latin.get(c, c) for c in name_part]) # 2. 提取艺术家-标题核心片段:按下划线分割后,筛选包含" - "的有效段 segments = [seg.strip() for seg in latin_name.split('_') if seg.strip()] target_segment = None for seg in segments: if ' - ' in seg: target_segment = seg break # 若未找到符合格式的片段,默认取第一段 if not target_segment: target_segment = segments[0] if segments else name_part # 3. 清理冗余字符,仅保留字母、数字、空格和连接符"-" cleaned_name = ''.join([c for c in target_segment if c.isalnum() or c in [' ', '-']]).strip() # 规范格式,去除多余空格和首尾连接符 cleaned_name = cleaned_name.replace(' ', ' ').rstrip('-').lstrip('-') # 生成最终文件名 new_name = f"{cleaned_name}.{ext}" # 重命名(避免覆盖已存在文件) old_file_path = os.path.join(path, old_name) new_file_path = os.path.join(path, new_name) if not os.path.exists(new_file_path): os.rename(old_file_path, new_file_path) else: print(f"跳过:{new_name} 已存在") print('处理完成!')
关键优化点
- 使用字典映射替代原脚本的多次
replace,代码更简洁易维护 - 自动识别带
-的艺术家-标题格式片段,适配目标文件名结构 - 增加重复文件名判断,防止文件被意外覆盖
- 清理冗余符号与空格,保证文件名格式统一规范
注意事项
- 若文件名结构与示例不一致,可调整分割规则(比如按
-分割、提取特定关键词前的内容) - 运行脚本前建议备份文件,避免数据丢失
内容的提问来源于stack exchange,提问作者user20883432
相关产品推荐
相关产品推荐

