You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:55:33