Python重命名含中文字符文件报错问题求助
解决Windows下含特殊字符的中文文件名重命名报错问题
问题根源
报错不是中文字符导致的,而是目标文件名里包含问号?——Windows系统的文件名不允许包含以下非法字符:/ \ : * ? " < > |,这才触发了WinError 123和Errno 22错误。
解决方案
1. 过滤文件名中的非法字符
先定义非法字符集合,将新文件名中的非法字符替换为合法字符(如下划线)或直接删除。
2. 用可靠的路径拼接方法
不要用字符串替换的方式处理路径,改用os.path模块的方法构造目标路径,避免路径拼接出错。
修改后的代码示例
import os import shutil # 定义Windows文件名非法字符 invalid_chars = '<>:"/\\|?*' # 处理新文件名:替换非法字符为下划线 clean_filename = str(filename).translate(str.maketrans({c: "_" for c in invalid_chars})) # 获取文件所在目录 file_dir = os.path.dirname(file) # 构造目标路径 target_path = os.path.join(file_dir, f"{clean_filename}.{filemenu.get()}") # 方法1:用os.rename重命名 os.rename(file, target_path) # 或者方法2:用shutil.move # shutil.move(file, target_path)
验证说明
将原目标文件名中的?替换后(比如改成今天 天气 很冷吗_.mp3),即可正常完成重命名操作。
内容的提问来源于stack exchange,提问作者farge_goty
相关产品推荐
相关产品推荐

