¿Qué es una línea rápida para eliminar líneas vacías de una cadena de python?

Tengo algo de código en una cadena de python que contiene líneas vacías extrañas. Me gustaría eliminar todas las líneas vacías de la cadena. ¿Cuál es la forma más pythonica de hacer esto?

Nota: no estoy buscando un re-formateador de código general, solo uno rápido o de dos líneas.

¡Gracias!

Qué tal si:

text = os.linesep.join([s for s in text.splitlines() if s]) 

¿Dónde text es la cadena con las posibles líneas extrañas?

 "\n".join([s for s in code.split("\n") if s]) 

Edit2:

 text = "".join([s for s in code.splitlines(True) if s.strip("\r\n")]) 

Creo que esa es mi versión final. Debería funcionar bien incluso con los finales de línea de mezcla de código. No creo que la línea con espacios se deba considerar vacía, pero si es así, s.strip () lo hará en su lugar.

 filter(None, code.splitlines()) filter(str.strip, code.splitlines()) 

son equivalentes a

 [s for s in code.splitlines() if s] [s for s in code.splitlines() if s.strip()] 

y podría ser útil para la legibilidad

LECCIÓN SOBRE LA ELIMINACIÓN DE NEWLINES Y LÍNEAS VACÍAS CON ESPACIOS

“t” es la variable con el texto. Verá una variable “s”, es una variable temporal que solo existe durante la evaluación del conjunto principal de paréntesis (olvidó el nombre de estas cosas de lil python)

Primero vamos a configurar la variable “t” para que tenga nuevas líneas:

 >>> t='hi there here is\na big line\n\nof empty\nline\neven some with spaces\n \nlike that\n\n \nokay now what?\n' 

Tenga en cuenta que hay otra manera de establecer la variable utilizando comillas triples

 somevar=""" asdfas asdf asdf asdf asdf """" 

Aquí está cómo se ve cuando lo vemos sin “imprimir”:

 >>> t 'hi there here is\na big line\n\nof empty\nline\neven some with spaces\n \nlike that\n\n \nokay now what?\n' 

Para ver con nuevas líneas reales, imprimirlo.

 >>> print t hi there here is a big line of empty line even some with spaces like that okay now what? 

EL MANDO RETIRE TODAS LAS LÍNEAS EN BLANCO (INCLUYENDO ESPACIOS):

Por lo tanto, las nuevas líneas son solo nuevas líneas, y algunas tienen espacios para que se vean como nuevas líneas.

Si desea deshacerse de todas las líneas en blanco (si solo tienen nuevas líneas o espacios)

 >>> print "".join([s for s in t.strip().splitlines(True) if s.strip()]) hi there here is a big line of empty line even some with spaces like that okay now what? 

O:

 >>> print "".join([s for s in t.strip().splitlines(True) if s.strip("\r\n").strip()]) hi there here is a big line of empty line even some with spaces like that okay now what? 

NOTA: esa tira en t.strip (). Splitline (True) puede eliminarse por lo que solo es t.splitlines (True), pero luego su salida puede terminar con una nueva línea adicional (de modo que se elimine la nueva línea final). La tira () en la última parte s.strip (“\ r \ n”). Strip () y s.strip () es lo que realmente elimina los espacios en las líneas nuevas y nuevas.

EL MANDO RETIRE TODAS LAS LÍNEAS EN BLANCO (PERO NO CON ESPACIOS):

Técnicamente, las líneas con espacios NO deben considerarse vacías, pero todo depende del caso de uso y de lo que intenta lograr.

 >>> print "".join([s for s in t.strip().splitlines(True) if s.strip("\r\n")]) hi there here is a big line of empty line even some with spaces like that okay now what? 

** NOTA SOBRE LA Tira MEDIA **

Esa franja central allí, que está unida a la variable “t”, simplemente elimina la última línea (como lo ha indicado la nota anterior). Aquí es cómo se vería si esa tira no estuviera allí (note la última nueva línea)

Con 1er ejemplo (eliminando nuevas líneas y nuevas líneas con espacios)

 >>> print "".join([s for s in t.strip().splitlines(True) if s.strip("\r\n").strip()]) hi there here is a big line of empty line even some with spaces like that okay now what? .without strip new line here (stackoverflow cant have me format it in). 

Con 2do ejemplo (eliminando nuevas líneas solamente)

 >>> print "".join([s for s in t.strip().splitlines(True) if s.strip("\r\n")]) hi there here is a big line of empty line even some with spaces like that okay now what? .without strip new line here (stackoverflow cant have me format it in). 

¡El fin!

Usando la función re.sub

 re.sub(r'^$\n', '', s, flags=re.MULTILINE) 

Éste también eliminará líneas de espacios.

re.replace(u'(?imu)^\s*\n', u'', code)

Aquí hay una solución de una línea:

 print("".join([s for s in mystr.splitlines(True) if s.strip()])) 

Y ahora para algo completamente diferente:

 Python 1.5.2 (#0, Apr 13 1999, 10:51:12) [MSC 32 bit (Intel)] on win32 Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam >>> import string, re >>> tidy = lambda s: string.join(filter(string.strip, re.split(r'[\r\n]+', s)), '\n') >>> tidy('\r\n \n\ra\n\nb \r\rc\n\n') 'a\012 b \012c' 

Episodio 2:

Este no funciona en 1.5 🙁

PERO no solo maneja líneas nuevas universales y líneas en blanco, sino que también elimina los espacios en blanco al final (buena idea al ordenar líneas de código IMHO) Y realiza un trabajo de reparación si la última línea significativa no se termina.

 import re tidy = lambda c: re.sub( r'(^\s*[\r\n]+|^\s*\Z)|(\s*\Z|\s*[\r\n]+)', lambda m: '\n' if m.lastindex == 2 else '', c) 

expandiendo la respuesta de ymv, puedes usar el filter con la join para obtener la cadena deseada,

 "".join(filter(str.strip, sample_string.splitlines(True)))