translate()只接受一个参数(给定2个)

时间:2017-04-09 21:26:17

标签: python

我想编写一个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()

2 个答案:

答案 0 :(得分:3)

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

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

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

顺便说一下,这也是Python 2 unicode.translate()的工作方式。

答案 1 :(得分:0)

如果您要完成的所有事情是在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'))

基本上,它说的是“什么都没有翻译成无内容”(前两个参数),并将所有标点符号或数字都转化为“无”(即删除它们)。