Pergunta

Eu tenho um arquivo que li que parece:

1   value1
2   value2
3   value3

O arquivo pode ou não ter um n na última linha.

O código que estou usando funciona muito bem, mas se houver um n, ele falha.
Qual é a melhor maneira de pegar isso?

Meu código para referência:

r=open(sys.argv[1], 'r');
for line in r.readlines():
    ref=line.split();
    print ref[0], ref[1]

O que falharia com a:
Traceback (chamada mais recente):
Arquivo "./test", linha 14, em
Imprima referência [0], Ref [1
IndexError: Lista Índice fora do intervalo

Foi útil?

Solução

Você pode ignorar linhas que contêm apenas um espaço em branco:

for line in r.readlines():
    line = line.rstrip()      # Remove trailing whitespace.
    if line:                  # Only process non-empty lines.
        ref = line.split();
        print ref[0], ref[1]

Outras dicas

Eu não acho que você nos contou a história toda. line.split() dará o mesmo resultado, independentemente de a última linha ser encerrada por \n ou não.

Observe que a última linha em um arquivo que está sendo encerrado por \n é o comportamento usual, e as pessoas são ocasionalmente incomodadas por uma linha que não é tão encerrada.

Se você fizesse algo como:

print repr(line), repr(ref)

ao invés de

print ref[0], ref[1]

Você seria capaz de detectar exatamente o que está acontecendo, em vez de nos deixar adivinhar.

Se, como @mark Byers supor, sua última linha está vazia ou consiste apenas em um espaço em branco, você pode ignorar essa linha (e todas essas outras linhas) por esse código um pouco mais simples:

for line in r: # readlines is passe
    ref = line.split() # split() ignores trailing whitespace
    if ref:
        print ref[0], ref[1]

Por favor, considere também a possibilidade de ter apenas um campo, não 0 ou 2, em sua última linha.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top