如何在Python3.6中实现Python2的str.translate仅删除字符功能?
解决Python3中文件名去数字的报错问题
这个报错是典型的Python2和Python3字符串方法差异导致的——Python2里str.translate()支持传入两个参数(转换表+要删除的字符),但Python3彻底改了这个方法的语法,只允许传一个转换表参数,所以你才会看到TypeError: translate() takes exactly one argument (2 given)。
给你两种可行的修改方案,都能实现删除文件名中数字的需求:
方案1:用str.maketrans()创建删除规则(推荐,效率更高)
这是最贴合原代码逻辑的修改方式,通过str.maketrans('', '', 删除字符集)生成符合Python3要求的转换表,再传给translate():
import os def rename_files(): file_list = os.listdir(r"C:\Users\Downloads\prank") saved_path = os.getcwd() print("Current Working Directory is " + saved_path) os.chdir(r"C:\Users\Downloads\prank") # 创建用于删除数字的转换表 delete_digits_table = str.maketrans('', '', "0123456789") for file_name in file_list: # 应用转换表去除数字后重命名 os.rename(file_name, file_name.translate(delete_digits_table)) os.chdir(saved_path) rename_files()
方案2:用列表推导式过滤数字(更直观易读)
如果觉得转换表的逻辑有点绕,也可以直接遍历文件名的每个字符,过滤掉数字后拼接成新文件名:
import os def rename_files(): file_list = os.listdir(r"C:\Users\Downloads\prank") saved_path = os.getcwd() print("Current Working Directory is " + saved_path) os.chdir(r"C:\Users\Downloads\prank") for file_name in file_list: # 只保留非数字字符 new_file_name = ''.join([char for char in file_name if not char.isdigit()]) os.rename(file_name, new_file_name) os.chdir(saved_path) rename_files()
额外提醒
- 运行脚本前确保
C:\Users\Downloads\prank文件夹里没有重名文件,否则os.rename()会抛出文件已存在的错误 - 要保证你的Python进程有该文件夹的读写权限
内容的提问来源于stack exchange,提问作者Roxanne
相关产品推荐
相关产品推荐

