2017-07-17 1 views
0

Je reçois une erreur en échappant certains caractères spéciaux de la chaîne en utilisant Python. L'erreur est donnée ci-dessous.Obtenir TypeError en échappant des caractères spéciaux de la chaîne en utilisant Python

Erreur:

trans_table = string.maketrans(trans_dict) 
TypeError: maketrans() takes exactly 2 arguments (1 given) 

J'explique mon code ci-dessous.

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

Ici, j'ai besoin d'échapper certains caractères spéciaux de la chaîne.

+0

Vous êtes utiliser 'maketrans' incorrectement. Voir [this] (https://stackoverflow.com/questions/41535571/how-to-explain-the-str-maketrans-function-in-python-3-6) –

+0

J'utilise 'python 2.7' et peux-tu s'il vous plaît, faites en sorte que cela corresponde à mes besoins? – satya

+0

Pouvez-vous ajouter le résultat souhaité à la question? –

Répondre

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 

Pour plus d'informations sur la façon dont les nouvelles œuvres maketrans voir this


Python 2

Le code ci-dessus ne travailler avec Python 2. Pour une solution de travail qui utilise .translate voir la réponse par @Moses. Je le ferais comme ça:

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

Comme j'utilise 'python 2.7',' str' pourrait causer des erreurs. – satya

+0

Vraiment, raté ça. –

+0

Je l'ai fait en fonction de vous mais toujours ce 'TypeError: maketrans() prend exactement 2 arguments (3 donnés)' erreur. – satya

2

maketrans ne prend pas dict en Python 2, il ne prend que deux paramètres de chaîne avec des longueurs égales.

Pour supprimer les caractères que vous devez passer un paramètre deletechars-translate avec mappage de traduction des chaînes vides:

... 
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 

Vous pouvez également déposer la table de traduction et de passer None-translate:

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

Comment est-ce possible? Cela ne va-t-il pas à l'encontre de la documentation? –

+0

@ Ev.Kounis Quelle documentation lisez-vous? [Python 2] (https://docs.python.org/2/library/string.html#string.translate)? –

+0

Merci Moïse. J'ai besoin de café! Il semble que vous ne devez pas mettre en place la table si aucun remplacement doit être fait. Donc, '.translate (None, delete_chars)' fonctionne aussi –