2013-06-08 2 views
2

Я анализирую файл журнала доступа Apache с помощью python, и я хочу извлечь из него поле Referrer. Referrer находится на 9-й позиции, расщепляя его, используя пробел в качестве разделителя. (Все вместе есть более 9 полей после разделения с использованием пробелов.) После кода напишите извлеченный файл в файл.IndexError: индекс индекса вне диапазона-Python

for line in open('log'): 
    referer = line.split(' ')[9] 
    fo.write(referer +'\n') 

Проблема: здесь поле referrer записывается в файл, но программа дает следующую ошибку? В чем может быть проблема?

Traceback (most recent call last): 
    File "temp.py", line 18, in <module> 
    referer = line.split(' ')[9] 
IndexError: list index out of range 

образец файла журнала строка:

112.135.128.20 - [13/May/2013:23:55:04 +0530] "GET /SVRClientWeb/ActionController HTTP/1.1" 302 2 "https://www.example.com/sample" "Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B329" GET /SVRClientWeb/ActionController - HTTP/1.1 www.test.com 
+0

Это означает, что не все линии выглядят одинаково. Вероятно, некоторые строки короче этого. – darxsys

+0

Возможно, одна из строк закорочена, что нарушает ваш скрипт. –

+2

Включите код try/except, который выводит строку, которая вызывает исключение, поэтому вы можете проверить, не соответствует ли эта строка шаблону. – jabaldonedo

ответ

0

Там, вероятно, является пустая строка где-то в файле (возможно, дополнительный символ новой строки в конце), или просто более короткий.

Вы можете (например) использовать перечисление, чтобы его найти!

for i, line in enumerate(f): 
0

Это означает, что одна из строк в вашем файле не имеет индекса [9] после разделения. Проверьте файл. Напечатать номер строки, чтобы проверить, где находится ошибка

i=0 
for line in open('log'): 
    referer = line.split(' ')[9] 
    fo.write(referer +'\n') 
    print i 
    i+=1 

Вы найдете номер строки и проверить линию в том месте, в Vim или любом редакторе.

Смежные вопросы