python: como verificar se uma linha é uma linha vazia

86

Tentando descobrir como escrever um ciclo if para verificar se uma linha está vazia.

O arquivo tem muitas strings, e uma delas é uma linha em branco para separar das outras instruções (não um ""; é um retorno de carro seguido por outro retorno de carro, eu acho)

new statement
asdasdasd
asdasdasdasd

new statement
asdasdasdasd
asdasdasdasd

Visto que estou usando o módulo de entrada de arquivo, há uma maneira de verificar se uma linha está vazia?

Usar este código parece funcionar, obrigado a todos!

for line in x:

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

x.close()
user1006198
fonte

Respostas:

128

Se você deseja ignorar as linhas apenas com espaços em branco:

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

A string vazia é um valor False.

Ou se você realmente quiser apenas linhas vazias:

if line in ['\n', '\r\n']:
    ... do  something
retrátil
fonte
o segundo faz o que eu tinha em mente, obrigado! se linha em ['\ n']:
user1006198
1
Se você estiver apenas usando if line in ['\n'], deve substituí-lo por if line == '\n'.
Andrew Clark,
7
Gostaria de salientar que a resposta aceita, tem um erro: if line.strip (): ... #do something ignora linhas com espaço em branco ou seja, espaço, tabulação e linha vazia. É por isso que apenas o segundo funcionou para o pôster original: o 'não' tem que ser removido.
niefpaarschoenen
3
se não line.strip (): ... faça algo. Não deveria continuar? porque senão line.strip () realmente significa que a linha está vazia, então nada pode ser retirado dela, portanto, ignore ou continue. A primeira parte, não line.strip (), captura todas as linhas vazias
Dhiwakar Ravikumar
1
Seria mais limpo usar em os.linesepvez de ['\n', '\r\n']?
Shawn de
24

Eu uso o código a seguir para testar a linha vazia com ou sem espaços em branco.

if len(line.strip()) == 0 :
    # do something with empty line
bevardgisuser
fonte
11
line.strip() == ''

Ou, se você não quiser "engolir" linhas que consistem em espaços:

line in ('\n', '\r\n')
Fred Foo
fonte
1
No segundo exemplo, você provavelmente também gostaria de verificar se há \r\nterminações de linha no estilo do Windows (CRLF)
poplitea
esqueci de mencionar que este está rodando em uma máquina Unix, então ele usa a nova linha sem o \ r. Você tentou, mas não funcionou, o que está funcionando para mim: se a linha em ['\ n']: (nenhuma pista por que a linha == "\ n" não funcionará)
usuário1006198
1
@ user1006198: se você está apenas verificando \n, então line == '\n'é melhor. Você provavelmente deveria tentar novamente e descobrir qual era o seu problema.
retrátil de
@ user1006198: (1) Ler um arquivo de texto criado pelo Windows no Unix lhe dará \r\nse você não está usando mode='rU'(2) Pegue uma pista: print repr(line)e se isso não fornecer uma pista, diga-nos exatamente o que "não funciona" significa para você.
John Machin,
A única explicação que tenho é que provavelmente a entrada do arquivo faz algo para cada linha, porque quando eu faço a comparação da linha com == eu não bato na instrução (imprimindo uma string para ver se eu bato na linha em branco , e com == ele nunca imprime a linha de depuração, enquanto o faz quando eu uso o "if line in").
user1006198,
2

Você deve abrir arquivos de texto usando rUnovas linhas para que sejam transformadas corretamente, consulte http://docs.python.org/library/functions.html#open . Dessa forma, não há necessidade de verificar \r\n.

hochl
fonte
tentei abrir, mas acho a entrada de arquivo mais adequada para o meu caso
user1006198
5
Também deve ser observado que o Uargumento não é compatível com python3.
jtwilson
1

Acho que é mais robusto usar expressões regulares:

import re

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

Isso corresponderia no Windows / unix. Além disso, se você não tiver certeza sobre as linhas que contêm apenas caracteres de espaço, você pode usar '\s*\r?\n'como expressão

alemol
fonte