¿Cómo puedo eliminar una nueva línea final?

7 minutos de lectura

¿Cuál es el equivalente Python de Perl? chomp función, que elimina el último carácter de una cadena si es una nueva línea?

  • Superconjunto: cualquier cadena en lugar de solo nueva línea: stackoverflow.com/questions/1038824/…

    – Ciro Santilli Путлер Капут 六四事

    26/09/2015 a las 21:46


  • La respuesta A+ es, si esto se debió a que se olvidó de open() un archivo con el correspondiente ‘nueva linea=…’ parámetro para su plataforma (soporte de nueva línea universal), es posible que no necesite eliminarlo explícitamente.

    – smci

    19 de diciembre de 2017 a las 4:03

Prueba el método rstrip() (ver documento Pitón 2 y Pitón 3)

>>> 'test string\n'.rstrip()
'test string'

de pitón rstrip() tiras de método todos tipos de espacios en blanco al final de forma predeterminada, no solo una nueva línea como lo hace Perl con chomp.

>>> 'test string \n \r\n\n\r \n\n'.rstrip()
'test string'

Para quitar solo saltos de línea:

>>> 'test string \n \r\n\n\r \n\n'.rstrip('\n')
'test string \n \r\n\n\r '

Además de rstrip()también están los métodos strip() y lstrip(). Aquí hay un ejemplo con los tres:

>>> s = "   \n\r\n  \n  abc   def \n\r\n  \n  "
>>> s.strip()
'abc   def'
>>> s.lstrip()
'abc   def \n\r\n  \n  '
>>> s.rstrip()
'   \n\r\n  \n  abc   def'

  • No soy una persona de Python, así que no tengo la respuesta a esto, pero chomp() de Perl en realidad elimina el separador de registro de entrada del final. Esa es una nueva línea en las cosas de Unixy, pero puede ser diferente (por ejemplo, Windows) y es mutable. ¿Hay alguna manera de eliminar ese valor solo una vez del final de una cadena?

    – brian d foy

    8 de noviembre de 2008 a las 21:04

  • brian d foy: Python no tiene un separador de registros de entrada como lo tienen awk y Perl.

    – Peter Hosey

    9 de noviembre de 2008 a las 6:13

  • @csde_rats, eso no es cierto: OS X usa \n para saltos de línea como Unix. (Antes de OS X, MacOS usaba \r como separador de línea, pero eso terminó hace 10 años).

    – skue

    4 de noviembre de 2012 a las 19:03


  • @briandfoy Python tiene soporte integrado para saltos de línea universales (solo al leer, no al escribir). Abre el archivo en modo “U” o “rU”, y luego, independientemente de Windows, Linux, Mac, lo que sea, cuando el texto llega a su código python, cualquier estilo de nueva línea ha sido reemplazado por “\n”. Ver: python.org/dev/peps/pep-0278

    – AlcubierreDrive

    7 de noviembre de 2012 a las 8:11

  • Voy a seguir adelante y explicar esto porque soy un novato y pasé un tiempo preguntándome por qué no funcionaba. .strip() no altera la cadena (probablemente tiene algo que ver con cadenas inmutables). Si no está en la línea de comandos, querrá "string = string.strip()"

    – Guión Gatito

    12 de abril de 2016 a las 1:06

Y yo diría que la forma “pitónica” de obtener líneas sin caracteres finales de nueva línea es splitlines().

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

¿Como puedo eliminar una nueva linea final
Miguel

La forma canónica de eliminar los caracteres de final de línea (EOL) es utilizar el método de cadena rstrip() eliminando cualquier \r o \n final. Estos son ejemplos de caracteres EOL de Mac, Windows y 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'

Usar ‘\r\n’ como parámetro para rstrip significa que eliminará cualquier combinación final de ‘\r’ o ‘\n’. Es por eso que funciona en los tres casos anteriores.

Este matiz importa en casos raros. Por ejemplo, una vez tuve que procesar un archivo de texto que contenía un mensaje HL7. El estándar HL7 requiere una ‘\r’ final como su carácter EOL. La máquina con Windows en la que estaba usando este mensaje había agregado su propio carácter ‘\r\n’ EOL. Por lo tanto, el final de cada línea parecía ‘\r\r\n’. El uso de rstrip(‘\r\n’) habría eliminado todo el ‘\r\r\n’, que no es lo que quería. En ese caso, simplemente eliminé los dos últimos caracteres.

Tenga en cuenta que a diferencia de Perl chomp función, esto eliminará todos los caracteres especificados al final de la cadena, no solo uno:

>>> "Hello\n\n\n".rstrip("\n")
"Hello"

  • Tenga en cuenta que las aplicaciones modernas de Mac OS X usan \n. Solo las aplicaciones antiguas de Carbon escritas originalmente para Mac OS usan \r.

    – Peter Hosey

    9 de noviembre de 2008 a las 6:15

  • Gracias por la aclaración. Por supuesto, rstrip(‘\r\n’) también funciona en ese caso.

    – Miguel

    9 de noviembre de 2008 a las 11:35

  • También hay os.linesepque contiene la secuencia EOL para el sistema operativo actual.

    – Eli Collins

    15 de agosto de 2011 a las 13:44


  • Esta es la mejor respuesta: Es solamente elimina las líneas nuevas y lo hace correctamente para las plataformas más comunes.

    – Kevinarpe

    12 de febrero de 2015 a las 3:58

  • más +1 por usar \n y \r

    – fechnert

    28 mayo 2015 a las 15:35

Tenga en cuenta que rstrip no actúa exactamente como chomp() de Perl porque no modifica la cadena. Es decir, en Perl:

$x="a\n";

chomp $x

da como resultado $x siendo "a".

pero en Python:

x="a\n"

x.rstrip()

significará que el valor de x es todavía "a\n". Incluso x=x.rstrip() no siempre da el mismo resultado, ya que elimina todos los espacios en blanco del final de la cadena, no solo una nueva línea como máximo.

¿Como puedo eliminar una nueva linea final
Jaime

Podría usar algo como esto:

import os
s = s.rstrip(os.linesep)

Creo que el problema con rstrip("\n") es que probablemente querrá asegurarse de que el separador de línea sea portátil. (Se rumorea que algunos sistemas anticuados usan "\r\n"). El otro problema es que rstrip eliminará los espacios en blanco repetidos. Ojalá os.linesep contendrá los caracteres correctos. lo anterior funciona para mí.

  • Sin embargo, esto no funcionará si está intentando limpiar el contenido enviado por el usuario en una aplicación web. El contenido del usuario puede provenir de cualquier fuente y contener caracteres de nueva línea.

    – apiguy

    18/01/2012 a las 18:50

  • Buen punto, excepto que puede estar procesando archivos ‘extranjeros’ (de sistemas anticuados) en su sistema operativo moderno.

    – ChuckCottrill

    6 de febrero de 2016 a las 2:56

  • Tenga en cuenta también que si está leyendo un archivo en modo de texto, esto tampoco funcionará en un sistema Windows, porque el carácter final siempre se convertirá en ‘\n’.

    – Físico loco

    28/04/2017 a las 19:55

  • @MadPhysicist Tienes razón en que lo convierte, pero aún funciona porque es lo mismo que rstrip('\r\n') y rstrip() eliminará cualquier carácter que esté en el argumento.

    – dtauxe

    18 de abril de 2019 a las 20:06

1646964314 850 ¿Como puedo eliminar una nueva linea final
flim

Puedes utilizar line = line.rstrip('\n'). Esto eliminará todas las líneas nuevas del final de la cadena, no solo una.

  • Sin embargo, esto no funcionará si está intentando limpiar el contenido enviado por el usuario en una aplicación web. El contenido del usuario puede provenir de cualquier fuente y contener caracteres de nueva línea.

    – apiguy

    18/01/2012 a las 18:50

  • Buen punto, excepto que puede estar procesando archivos ‘extranjeros’ (de sistemas anticuados) en su sistema operativo moderno.

    – ChuckCottrill

    6 de febrero de 2016 a las 2:56

  • Tenga en cuenta también que si está leyendo un archivo en modo de texto, esto tampoco funcionará en un sistema Windows, porque el carácter final siempre se convertirá en ‘\n’.

    – Físico loco

    28/04/2017 a las 19:55

  • @MadPhysicist Tienes razón en que lo convierte, pero aún funciona porque es lo mismo que rstrip('\r\n') y rstrip() eliminará cualquier carácter que esté en el argumento.

    – dtauxe

    18 de abril de 2019 a las 20:06

1646964314 850 ¿Como puedo eliminar una nueva linea final
flim

s = s.rstrip()

eliminará todas las líneas nuevas al final de la cadena s. La asignación es necesaria porque rstrip devuelve una nueva cadena en lugar de modificar la cadena original.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad