Игнорировать последнюю N при использовании ReadLines с Python
Вопрос
У меня есть файл, который я прочитал из этого похоже:
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, в вашей последней строке.