使用Python从字符串中转义某些特殊字符时出现错误。错误如下所示。
错误:
trans_table = string.maketrans(trans_dict)
TypeError: maketrans() takes exactly 2 arguments (1 given)
我正在解释下面的代码。
import sys
import string
if "win" in sys.platform:
special = """( ) < > * ‘ = ? ; [ ] ^ ~ ! . ” % @ / \ : + , `""".split()
else:
special = """{ } ( ) < > * ‘ = ? ; [ ] $ – # ~ ! . ” % / \ : + , `""".split()
trans_dict = {character: None for character in special}
trans_table = string.maketrans(trans_dict)
print("Lo+=r?e~~m ipsum dol;or sit!! amet, consectet..ur ad%".translate(trans_table))
这里我需要从字符串中转义一些特殊字符。
答案 0 :(得分:2)
maketrans
不会在Python 2中使用dict,它只需要两个相同长度的字符串参数。
要删除字符,您应该将deletechars
参数传递给translate
,并将转换映射为空字符串:
...
delete_chars = ''.join(special)
trans_table = string.maketrans('', '')
print("Lo+=r?e~~m ipsum dol;or sit!! amet, consectet..ur ad%"
.translate(trans_table, delete_chars))
# Lorem ipsum dolor sit amet consectetur ad
您也可以删除翻译表并将None
传递给translate
:
print("Lo+=r?e~~m ipsum dol;or sit!! amet, consectet..ur ad%"
.translate(None, delete_chars))
答案 1 :(得分:1)
Python 3
import sys
if "win" in sys.platform:
special = """()<>*‘=?;[]^~!.”%@/\:+,`"""
else:
special = """{}()<>*‘=?;[]$–#~!.”%/\:+,`"""
translator = str.maketrans('', '', special)
print("Lo+=r?e~~m ipsum dol;or sit!! amet, consectet..ur ad%".translate(translator))
# Lorem ipsum dolor sit amet consectetur ad
有关新maketrans
的工作原理的详情,请参阅this
Python 2
上面给出的代码 不适用于Python 2.对于使用.translate
的工作解决方案,请参阅@Moses的答案。我会那样做:
import sys
if "win" in sys.platform:
special = """()<>*‘=?;[]^~!.”%@/\:+,`"""
else:
special = """{}()<>*‘=?;[]$–#~!.”%/\:+,`"""
my_string = "Lo+=r?e~~m ipsum dol;or sit!! amet, consectet..ur ad%"
my_string = ''.join(x for x in my_string if x not in special)
# Lorem ipsum dolor sit amet consectetur ad