Хорошо, чтобы немного отличаться и дать обобщенное решение в комментариях, я использую строку заголовка вместо слайса и функции генератора.Кроме того, я позволил первым столбцам комментировать, не помещая имя поля в первый столбец и используя имена полей с несколькими символами вместо только '#'.
Минус в том, что поля одного символа не могут иметь имена заголовковно иметь только «#» в строке заголовка (которая всегда рассматривается как начало поля, даже после букв в заголовке)
sample="""
HOTEL CAT ST DEP ##
Test line Techy Inn Val NJ FT FT
"""
data=sample.splitlines()[1:]
def fields(header,line):
previndex=0
prevchar=''
for index,char in enumerate(header):
if char == '#' or (prevchar != char and prevchar == ' '):
if previndex or header[0] != ' ':
yield line[previndex:index]
previndex=index
prevchar = char
yield line[previndex:]
header,dataline = data
print list(fields(header,dataline))
Вывод
['Techy Inn ', 'Val ', 'NJ ', 'FT ', 'F', 'T']
Один практическийиспользование этого заключается в том, чтобы использовать при разборе данных фиксированной длины поля, не зная длины, просто поместив копию строки данных со всеми полями и без комментариев, а пробелы заменяются чем-то другим, например, '_', а значения односимвольных полей заменяются на #.
Заголовок из строки пробы:
' Techy_Inn Val NJ FT ##'