Игнорировать последнюю N при использовании ReadLines с Python

StackOverflow https://stackoverflow.com/questions/4006441

  •  25-09-2019
  •  | 
  •  

Вопрос

У меня есть файл, который я прочитал из этого похоже:

1   value1
2   value2
3   value3

Файл может или не может иметь трейлинг n в последней строке.

Код, который я использую, отлично работает, но если есть трейлинг n, не удается.
Какой лучший способ поймать это?

Мой код для справки:

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

Что бы потерпеть неудачу с A:
Traceback (последний звонок последним):
Файл "./тест", строка 14, в
Печать Ref [0], Ref [1
IndexError: Индекс списка вне диапазона

Это было полезно?

Решение

Вы можете игнорировать линии, которые содержат только пробел:

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]

Другие советы

Я не думаю, что вы сказали нам всю историю. line.split() даст тот же результат независимо от того, заканчивается ли последняя строка \n или не.

Обратите внимание, что последняя строка в файле завершается \n Это обычное поведение, и люди иногда беспокоятся линии, которая не так прекращена.

Если бы вы делали что-то вроде:

print repr(line), repr(ref)

вместо

print ref[0], ref[1]

Вы сможете обнаружить для себя точно, что происходит, вместо того, чтобы угадать нас догадаться.

Если @mark Byers surmises, ваша последняя строка пуста или состоит только из пробела, вы можете игнорировать эту строку (и все остальные такие строки) этим несколько простым кодом:

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

Пожалуйста, также рассмотрите возможность того, что у вас есть только одно поле, а не 0 или 2, в вашей последней строке.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top