Преобразование столбца в список

#python-2.7

#python-2.7

Вопрос:

Мне нужно применить цикл for к файлу, содержащему записи команды, чтобы преобразовать один из столбцов в список. Пожалуйста, сообщите, заранее спасибо.

Данные, как показано ниже :

 TOPIC           PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             
asset           8          100             1009663         1             
asset           7          200             523533          1               
asset           9          319710          319710          0              
asset           5          870935          870935          0
 

Это мой код :

 lag_list = []
with open(fname) as f:
    f.readline()
    lines = f.readlines()[1: ]
    length = len(lines)
    print(length)
    for line in lines:
        print "Hello"
        print line
        print "hello 2"
        data=line.split(' ')
        lag_list.append(data[4])
        data=line.split("t")
        lag_list.append(data[4])
    print lag_list
return
 

Но возвращает эту ошибку:

 lag_list.append(data[4])
IndexError: list index out of range
 

Комментарии:

1. Очевидно, не все ваши строки содержат пять элементов, разделенных пробелами. Выполняли ли вы какую-либо отладку, чтобы выяснить, что содержит строка ?

Ответ №1:

Ваши данные содержат — не 4 табуляции в строке — или не 4 пробела в строке — или у вас есть n после последней строки ваших исходных данных

При чтении этих строк и их разделении у вас нет 5 элементов в результирующем списке — отсюда ошибка индекса при доступе data[4] .

Разделение одного и того же списка пробелами и табуляциями не имеет для меня особого смысла — я надеюсь, что это относится к вашим данным и приложению.

Проверьте разделенный список перед индексацией в него:

 lag_list = []

with open(fname) as f:
    f.readline()
    lines = f.readlines()[1: ]
    length = len(lines)
    print(length)
    for line in lines:
        print "Hello"
        print line
        print "hello 2"
        data = line.split(' ') 
        if len(data) >= 5:                 # check if safe to index into
            lag_list.append(data[4]     
        else:
            print("Not enough elements - need 5 at least:", data)
        data = line.split("t")
        if len(data) >= 5:                 # check if safe to index into
            lag_list.append(data[4])
        else:
            print("Not enough elements - need 5 at least:", data)
    print lag_list
return