C'est l'une des questions que je me pose le plus souvent lorsque je code en Python (j'ai été nourri de Perl quand j'étais bébé et j'essaie toujours de me débarrasser de cette affliction) et je voulais la poser sur stack overflow pour que la prochaine fois que je cherche 'chomp python' sur google, j'obtienne une réponse utile.
Réponses
Trop de publicités?Essayez le rstrip méthode.
>>> 'test string\n'.rstrip()
'test string'
Notez que la méthode rstrip de Python dépouille tous par défaut, et pas seulement les retours à la ligne comme Perl le fait avec chomp. Pour supprimer uniquement les retours à la ligne :
>>> 'test string \n'.rstrip('\n')
'test string '
Il y a aussi le lstrip
et strip
méthodes.
>>> s = " \n abc def "
>>> s.strip()
'abc def'
>>> s.rstrip()
' \n abc def'
>>> s.lstrip()
'abc def '
>>>
La façon canonique de supprimer les caractères de fin de ligne (EOL) est d'utiliser la méthode rstrip() de la chaîne de caractères en supprimant tout caractère de fin de ligne. \r ou \n. Voici des exemples de caractères EOL pour Mac, Windows et Unix.
>>> 'Mac EOL\r'.rstrip('\r\n')
'Mac EOL'
>>> 'Windows EOL\r\n'.rstrip('\r\n')
'Windows EOL'
>>> 'Unix EOL\n'.rstrip('\r\n')
'Unix EOL'
Utilisation \r\n en tant que paramètre de rstrip signifie qu'il supprimera toute combinaison arrière de ' \r ou \n '. C'est pourquoi cela fonctionne dans les trois cas ci-dessus.
Cette nuance n'a d'importance que dans de rares cas. Par exemple, j'ai eu un jour à traiter un fichier texte qui contenait un message HL7. La norme HL7 exige que l'on ajoute un ' \r comme caractère EOL. La machine Windows sur laquelle j'utilisais ce message avait ajouté son propre caractère ' \r\n Le caractère EOL '. Par conséquent, la fin de chaque ligne ressemblait à ' \r\r\n '. Utilisation de rstrip(') \r\n ) aurait enlevé toute la partie ' \r\r\n ce qui n'est pas ce que je voulais. Dans ce cas, j'ai simplement coupé les deux derniers caractères à la place.
Notez que rstrip ne se comporte pas exactement comme chomp() de Perl car il ne modifie pas la chaîne de caractères. C'est-à-dire, en Perl :
$x="a\n";
chomp $x
résulte en $x
être "a"
.
mais en Python :
x="a\n"
x.rstrip()
signifie que la valeur de x
est toujours "a\n"
. Vous devez écrire x=x.rstrip()
pour obtenir le comportement équivalent.
Je pourrais utiliser quelque chose comme ça :
import os
s = s.rstrip(os.linesep)
Je pense que le problème avec rstrip("\n")
est que vous voudrez probablement vous assurer que le séparateur de ligne est portable. (on dit que certains systèmes vétustes utilisent des "\r\n"
) J'espère os.linesep
contiendra les bons caractères. Ce qui précède fonctionne pour moi.