使用Python从字符串中转义特殊字符时获取TypeError

时间:2017-07-17 08:50:33

标签: python escaping

使用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))

这里我需要从字符串中转义一些特殊字符。

2 个答案:

答案 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