python 3中str.translate的替代方法是什么?

时间:2016-11-19 05:25:28

标签: python python-2.7 python-3.x

我使用以下函数从文件名中删除数字。

import os

def rename_files():
    file_list = os.listdir(r"C:\Users\X\Downloads\Compressed\prank\prank")
##    print(file_list)
    os.chdir(r"C:\Users\X\Downloads\Compressed\prank\prank")
    print(os.getcwd())
    for file_name in file_list:
        os.rename(file_name, file_name.translate(None, "1234567890"))        

rename_files()

它在python 2中完美运行,但在python 3中它会抛出以下错误。

  Traceback (most recent call last):
  File "C:\Python34\rename_files.py", line 11, in <module>
    rename_files()
  File "C:\Python34\rename_files.py", line 9, in rename_files
    os.rename(file_name, file_name.translate(None, "1234567890"))
TypeError: translate() takes exactly one argument (2 given)

如何在不使用正则表达式的情况下解决此问题。

1 个答案:

答案 0 :(得分:1)

str.translate仍然存在于Python 3中,它的使用方式不同(尽管它与Py2中的unicode.translate匹配)。 maketrans现在是str(和bytes)的静态方法,str.maketrans的字符删除是通过用于翻译的相同查找表来处理的。

对于您的情况,您可以提前一次:

deletedigits = str.maketrans(dict.fromkeys("1234567890"))

然后执行翻译:

file_name.translate(deletedigits)

请注意,还有其他方法可以实现此目的,例如:

# ifilterfalse on Py2
''.join(itertools.filterfalse(str.isdigit, file_name))

或:

''.join(let for let in file_name if not let.isdigit())