Détails
Suppression de caractères spécifiques d'une chaîne de caractères en Python
J’essaie de supprimer des caractères spécifiques d’une chaîne de caractères en utilisant Python. Voici le code que j'utilise actuellement. Malheureusement, il ne semble rien faire à la chaîne.
for char in line:
if char in " ?.!/;:":
line.replace(char,'')
Comment faire correctement ?
488
3
Les chaînes de caractères en Python sont immuables (ne peuvent pas être modifiées). Pour cette raison, l'effet de
line.replace(...)
est juste de créer une nouvelle chaîne, plutôt que de changer l'ancienne. Vous devez rebinder (assigner) la variable àline
pour qu'elle prenne la nouvelle valeur, avec les caractères supprimés.De plus, la façon dont vous le faites va être relativement lente. Elle risque également d'être un peu déroutante pour les pythoniciens expérimentés, qui verront une structure doublement imbriquée et penseront un instant que quelque chose de plus compliqué se passe.
À partir de Python 2.6 et des versions plus récentes de Python 2.x *, vous pouvez utiliser [
str.translate
][1], (mais lisez la suite pour les différences avec Python 3) :ou le remplacement d'une expression régulière avec
re.sub
Les caractères entre parenthèses constituent une classe de caractères. Tous les caractères de
line
qui font partie de cette classe sont remplacés par le second paramètre desub
: une chaîne vide.En Python 3, les chaînes de caractères sont Unicode. Kevpie le mentionne dans un [commentaire][2] sur l'une des réponses, et c'est indiqué dans la [documentation de
str.translate
][1].Lorsque vous appelez la méthode
translate
d'une chaîne Unicode, vous ne pouvez pas passer le second paramètre que nous avons utilisé ci-dessus. Vous ne pouvez pas non plus passerNone
comme premier paramètre, ou même une table de traduction destring.maketrans
. A la place, vous devez passer un dictionnaire comme seul paramètre. Ce dictionnaire fait correspondre les valeurs ordinales des caractères (c'est-à-dire le résultat de l'appel deord
sur eux) aux valeurs ordinales des caractères qui devraient les remplacer, ou - ce qui est utile pour nous -None
pour indiquer qu'ils devraient être supprimés.Donc, pour faire la danse ci-dessus avec une chaîne Unicode, il faut appeler quelque chose comme
Ici,
dict.fromkeys
etmap
sont utilisés pour générer succinctement un dictionnaire contenantEncore plus simple, comme le dit une autre réponse, créer le dictionnaire sur place :
* Pour des raisons de compatibilité avec les versions antérieures de Python, vous pouvez créer une table de traduction "null" à passer à la place de "None" :
Ici,
string.maketrans
est utilisé pour créer une table de traduction, qui est juste une chaîne contenant les caractères avec des valeurs ordinales de 0 à 255.[1] : https://docs.python.org/2/library/stdtypes.html#str.translate [2] : https://stackoverflow.com/questions/3939361/remove-specific-characters-from-a-string-in-python#comment-4205256
Les chaînes de caractères sont immuables en Python. La méthode
replace
renvoie une nouvelle chaîne après le remplacement. Essayez :