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

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

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

11
line.strip() == ''

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

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

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,


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.