Python: cómo verificar si una línea es una línea vacía


86

Tratando de averiguar cómo escribir un ciclo if para comprobar si una línea está vacía.

El archivo tiene muchas cadenas, y una de ellas es una línea en blanco para separar de las otras declaraciones (no una ""; es un retorno de carro seguido de otro retorno de carro, creo)

new statement
asdasdasd
asdasdasdasd

new statement
asdasdasdasd
asdasdasdasd

Dado que estoy usando el módulo de entrada de archivos, ¿hay alguna manera de verificar si una línea está vacía?

Usar este código parece funcionar, ¡gracias a todos!

for line in x:

    if line == '\n':
        print "found an end of line"

x.close()

Respuestas:


128

Si desea ignorar líneas con solo espacios en blanco:

if not line.strip():
    ... do something

La cadena vacía es un valor falso.

O si realmente quieres solo líneas vacías:

if line in ['\n', '\r\n']:
    ... do  something

el segundo hace lo que tenía en mente, ¡Gracias! si la línea en ['\ n']:
user1006198

1
Si solo está usando if line in ['\n'], debe reemplazarlo con if line == '\n'.
Andrew Clark

7
Me gustaría señalar que la respuesta aceptada tiene un error: if line.strip (): ... #hace algo ignora las líneas con espacios en blanco, es decir, espacio, tabulación y línea vacía. Es por eso que solo el segundo funcionó para el cartel original: el 'no' debe eliminarse.
niefpaarschoenen

3
si no es line.strip (): ... haz algo. ¿No debería continuar en su lugar? porque si no line.strip () en realidad significa que la línea está vacía, por lo que no se puede quitar nada, por lo tanto, ignore o continúe. La primera parte no line.strip () captura todas las líneas vacías
Dhiwakar Ravikumar

1
¿Sería más limpio de usar en os.lineseplugar de ['\n', '\r\n']?
Shawn

24

Utilizo el siguiente código para probar la línea vacía con o sin espacios en blanco.

if len(line.strip()) == 0 :
    # do something with empty line

11
line.strip() == ''

O, si no quiere "comerse" las líneas que constan de espacios:

line in ('\n', '\r\n')

1
En la segunda muestra, probablemente también le gustaría verificar para \r\ntener en cuenta los finales de línea al estilo de Windows (CRLF)
poplitea

Olvidé mencionar que esto se está ejecutando en una máquina Unix, por lo que usa la nueva línea sin el \ r. Lo intenté, pero no funcionó, lo que me funciona: si la línea en ['\ n']: (no tengo idea de por qué la línea == "\ n" no funcionará)
user1006198

1
@ user1006198: si solo está buscando \n, entonces line == '\n'es mejor. Probablemente debería intentarlo de nuevo y averiguar cuál era su problema.
retracile

@ user1006198: (1) Leer un archivo de texto creado por Windows en Unix le dará \r\nsi no está usando mode='rU'(2) Obtenga una pista: print repr(line)y si eso no proporciona una pista, díganos exactamente qué "no funciona" significa para ti.
John Machin

La única explicación que tengo es que probablemente la entrada del archivo hace algo en cada línea, porque cuando hago la comparación de la línea con == no toco la declaración (imprimiendo una cadena para ver si toco la línea en blanco , y con == nunca imprime la línea de depuración, mientras que lo hace cuando uso el "if line in").
user1006198


1

Creo que es más robusto usar expresiones regulares:

import re

for i, line in enumerate(content):
    print line if not (re.match('\r?\n', line)) else pass

Esto coincidiría en Windows / unix. Además, si no está seguro de las líneas que contienen solo caracteres espaciales, puede usarlas '\s*\r?\n'como expresión

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.