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()
usuario1006198
fuente

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
retraciliar
fuente
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
bevardgisuser
fuente
11
line.strip() == ''

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

line in ('\n', '\r\n')
Fred Foo
fuente
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
2

Debe abrir los archivos de texto rUpara que las nuevas líneas se transformen correctamente, consulte http://docs.python.org/library/functions.html#open . De esta manera, no es necesario verificar \r\n.

hochl
fuente
probé la apertura, pero encuentro la entrada de archivo más adecuada para mi caso
user1006198
5
También debe tenerse en cuenta que el Uargumento no es compatible con python3.
jtwilson
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

alemol
fuente