Python 3 中 str.translate 的替代品是什么? [重复]

问题描述 投票:0回答:1

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

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)

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

python python-2.7 python-3.x
1个回答
3
投票

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

对于您的情况,您首先需要这样做:

deletedigits = str.maketrans("", "", "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()])
© www.soinside.com 2019 - 2024. All rights reserved.