错误:TypeError:translate()接受一个参数(给定2个)

时间:2016-11-24 17:32:42

标签: python translate

我是python的新手。我在执行代码时遇到错误:** 如下所示:

 File "C:/Users/shashipau/PycharmProjects/FirstProject/rename.py", line 14, in <module>
    rename_files()
  File "C:/Users/shashipau/PycharmProjects/FirstProject/rename.py", line 10, in rename_files
    os.rename(re_file, re_file.translate(None, "0123456789"))
    TypeError: translate() takes exactly one argument (2 given)
   Process finished with exit code 1

我的代码是:

import os

def rename_files():
    sxlist_file = os.listdir(r"D:\Python Te\PythomProgram\prank")
    os.chdir(r"D:\Python Te\PythomProgram\prank")
    save_path = os.getcwd()
    print(sxlist_file)
    for re_file in sxlist_file:
        os.rename(re_file, re_file.translate(None, "0123456789"))
        os.chdir(save_path)

rename_files()

2 个答案:

答案 0 :(得分:0)

正如您在method's documentation中看到的那样,translate()只需要一个参数。您正在None发送"0123456789"re_file.translate(None, "0123456789")

此外,该方法不会像你明显想象的那样string,因为它也在文档中说明。

  

该表必须是通过__getitem__()实现索引的对象,通常是映射或序列。

要创建此对象,请使用maketrans方法。

答案 1 :(得分:0)

首先,我觉得有必要告诉你运行这个程序的想法有多糟糕。即使是恶作剧。

有了这个,这是一个了解错误消息的机会。让我们拆开错误信息,看看它告诉我们什么。

 File "C:/Users/shashipau/PycharmProjects/FirstProject/rename.py", line 14, in <module>
    rename_files()

首先我们有回溯,这不是错误本身,但显示了为返回错误的函数所做的调用。第一行显示函数调用的文件和行号。第二个显示了呼叫的内容。从这里我们可以看出,在rename.py的第14行,没有参数调用了rename_files()。

 File "C:/Users/shashipau/PycharmProjects/FirstProject/rename.py", line 10, in rename_files
    os.rename(re_file, re_file.translate(None, "0123456789"))
    TypeError: translate() takes exactly one argument (2 given)

下一组行是在这种情况下发生错误的地方。我们可以看到上一节中讨论的相同信息以及错误消息。 消息告诉我们,函数translate()有一个额外的参数。我们现在可以回顾错误返回的行,并看到对translate()的函数调用有两个参数,None和“0123456789”。使用修复错误的单个参数替换它们。

修复错误后,一切都无法正常工作! 如果我们看一下documentation,我们可以看到预期的参数是一个转换表,可以通过调用str.maketrans()生成。因此,您的代码可以更改为以下内容:

import os

def rename_files():
    trans_table = str.maketrans("abcdefghij", "0123456789")
    sxlist_file = os.listdir(r"D:\Python Te\PythomProgram\prank")
    os.chdir(r"D:\Python Te\PythomProgram\prank")
    save_path = os.getcwd()
    print(sxlist_file)
    for re_file in sxlist_file:
        os.rename(re_file, re_file.translate(trans_table))
        os.chdir(save_path)

rename_files()

请为了上帝的爱,不要运行此代码。给它一个文件来重命名,不要扫描文件。特别是当你是python的新手时,你可能会做错事,并无意中重命名了许多你不想要的文件。