【问题标题】:translate() takes exactly one argument (2 given)translate() 只接受一个参数(给定 2 个)
【发布时间】:2019-07-15 21:21:39
【问题描述】:

我想编写一个python程序来重命名文件夹中的所有文件,以便我从文件名中删除数字,例如:chicago65.jpg将重命名为chicago.jpg。

以下是我的代码,但我收到错误,因为 translate() 只需要 1 个参数。请帮忙解决这个问题

import os
def rename_files():
    file_list=os.listdir(r"C:\Users\manishreddy\Desktop\udacity\Secret Message\prank\prank")
    print(file_list)
    os.chdir(r"C:\Users\manishreddy\Desktop\udacity\Secret Message\prank\prank")
    for file_temp in file_list:
        os.rename(file_temp,file_temp.translate(None,"0123456789"))

rename_files()

【问题讨论】:

标签: python


【解决方案1】:

您在 Python 3 中使用 Python 2 str.translate() 签名。takes only 1 argument 方法是从代码点(整数)到替换的映射或 None 删除该代码点。

您可以改为使用str.maketrans() static method 创建映射:

os.rename(
    file_temp, 
    file_temp.translate(str.maketrans('', '', '0123456789'))
)

顺便说一句,这也是 Python 2 unicode.translate() 的工作原理。

【讨论】:

    【解决方案2】:

    如果您想要完成的只是在 Python 3 中做与在 Python 2 中所做的相同的事情,那么我在 Python 2.0 中所做的就是丢弃标点符号和数字:

    text = text.translate(None, string.punctuation)
    text = text.translate(None, '1234567890')
    

    这是我的 Python 3.0 等效项:

    text = text.translate(str.maketrans('','',string.punctuation))
    text = text.translate(str.maketrans('','','1234567890'))
    

    基本上它说“什么都不翻译”(前两个参数)并将任何标点符号或数字转换为无(即删除它们)。

    【讨论】:

      猜你喜欢
      • 2019-06-24
      • 2017-01-15
      • 1970-01-01
      • 2013-07-08
      • 2021-12-04
      • 2014-06-04
      • 2017-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多