2

我正在用 python 分析一个 Apache 访问日志文件,我想从中提取Referrer字段。Referrer位于第 9 个位置,使用空格作为分隔符。(用空格分割后总共有9个以上的字段。)以下代码将提取的字段写入文件。

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

这里的问题是引用字段被写入文件,但程序给出以下错误?可能是什么问题呢?

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
4

2 回答 2

0

这意味着文件中的一行在拆分后没有 [9] 索引。检查文件。打印行号以检查错误在哪里

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

您将在 vim 或任何编辑器中的该位置找到行号和检查行。

于 2013-06-09T13:32:57.227 回答
0

文件中的某处可能有一个空行(可能末尾有一个额外的换行符),或者只是一个较短的行。

您可以(例如)使用 enumerate 来查找它!

for i, line in enumerate(f):
于 2013-06-08T13:48:33.360 回答