2015 votes

Comment supprimer (chomp) une nouvelle ligne en Python ?

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.

2258voto

Rich Bradshaw Points 33598

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

183voto

Ryan Ginstrom Points 8354

Et je dirais que la façon "pythique" d'obtenir des lignes sans caractères de fin de ligne est splitlines().

>>> text = "line 1\nline 2\r\nline 3\nline 4"
>>> text.splitlines()
['line 1', 'line 2', 'line 3', 'line 4']

167voto

Mike Points 1273

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.

102voto

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.

55voto

Jamie Points 275

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X