Чтобы обобщить задачу чтения нескольких строк заголовка и улучшить читабельность, я бы использовал метод извлечения.Предположим, что вы хотите токенизировать первые три строки coordinates.txt
для использования в качестве информации заголовка.
Пример
coordinates.txt
---------------
Name,Longitude,Latitude,Elevation, Comments
String, Decimal Deg., Decimal Deg., Meters, String
Euler's Town,7.58857,47.559537,0, "Blah"
Faneuil Hall,-71.054773,42.360217,0
Yellowstone National Park,-110.588455,44.427963,0
Тогда метод извлечения позволяет указать что вы хотите сделать с информацией заголовка (в этом примере мы просто токенизируем строки заголовка на основе запятой и возвращаем их в виде списка, но есть место, чтобы сделать гораздо больше).
def __readheader(filehandle, numberheaderlines=1):
"""Reads the specified number of lines and returns the comma-delimited
strings on each line as a list"""
for _ in range(numberheaderlines):
yield map(str.strip, filehandle.readline().strip().split(','))
with open('coordinates.txt', 'r') as rh:
# Single header line
#print next(__readheader(rh))
# Multiple header lines
for headerline in __readheader(rh, numberheaderlines=2):
print headerline # Or do other stuff with headerline tokens
Вывод
['Name', 'Longitude', 'Latitude', 'Elevation', 'Comments']
['String', 'Decimal Deg.', 'Decimal Deg.', 'Meters', 'String']
Если coordinates.txt
содержит другой заголовок, просто измените numberheaderlines
.Лучше всего ясно, что делает __readheader(rh, numberheaderlines=2)
, и мы избегаем двусмысленности необходимости выяснять или комментировать, почему автор принятого ответа использует next()
в своем коде.