Error: TypeError: translate() takes one argument (2 given)

Error: TypeError: translate() takes one argument (2 given)

我是 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()

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

中发送 None"0123456789"

此外,该方法并不像您显然认为的那样期望 string,正如文档中所述。

The table must be an object that implements indexing via __getitem__(), typically a mapping or sequence.

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

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

除此之外,这是了解错误消息的机会。让我们拆开错误信息,看看它告诉我们什么。

 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”。用修复 this error.

的单个参数替换它们

修复该错误后,一切仍将无法正常工作! 如果我们看一下documentation, we can see the expected argument is a translation table which can be generated by calling 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 的新手时,您可能会做错事并无意中重命名很多您不希望重命名的文件。