2017-07-17 49 views
0

我在使用Python转义字符串转义某些特殊字符时出现了一些错误。错误在下面给出。使用Python从字符串转义特殊字符时得到TypeError

错误:

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

你是错误地使用'maketrans'。看到[这](https://stackoverflow.com/questions/41535571/how-to-explain-the-str-maketrans-function-in-python-3-6) –

+0

我使用'python 2.7',你能请根据我的需要做出正确的答案? – satya

+0

你可以在问题中添加所需的输出吗? –

回答

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 
+0

因为我正在使用'python 2.7','str'可能会导致错误。 – satya

+0

没错,错过了。 –

+0

我按你的方式做了,但仍然是这个'TypeError:maketrans()只需要2个参数(3给出)'错误。 – satya

2

maketrans并不需要一个字典在Python 2中,只需要与相同长度的两个字符串参数。

要删除字符,你应该通过一个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 

你也可能下降的转换表,并通过Nonetranslate

print("Lo+=r?e~~m ipsum dol;or sit!! amet, consectet..ur ad%" 
    .translate(None, delete_chars)) 
+0

这怎么可能?这是否违背了文档? –

+0

@ Ev.Kounis你在阅读什么文件? [Python 2](https://docs.python.org/2/library/string.html#string.translate)? –

+0

感谢摩西。我需要一些咖啡!如果没有替换,你似乎不必设置表格。所以,'.translate(None,delete_chars)'也可以工作 –