2017-07-17 50 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)'也可以工作 –