2013-03-27 52 views
0

我有一個IIS服務器日誌文件,因爲您知道它有一個名爲cs(Referer)的字段。我想要獲取該列下的所有值?請幫助我?獲取所有值在cs(Referer)

#!/usr/bin/env python 
f = open('log.txt','r') 
data = f.read() 

import re 

#print data 

def find(pat,text): 
     match = re.search(pat,text) 
     if match: print match.group() 
     else: print 'not found!' 
+0

我們如何知道?請舉一個日誌文件的例子。我一個人從來沒有看過我的生活中的IIS日誌! – boxed 2013-03-27 09:00:55

+0

#字段:日期時間s-sitename s-ip cs-method cs -uri-stem cs -uri-query s-port cs-username c-ip cs(User-Agent)cs(Referer)sc-status sc-substatus sc-win32-status 2012-11-27 23:59:59 W3SVC1 192.168.5.3 GET /online/scripts/keyboard.js - 443 - 175.157.83.133 Mozilla/5.0 +(Windows + NT + 6.1; + rv:16.0 )+ Gecko/20100101 + Firefox/16.0 https://www.mysite.com/online/2/2/22001.aspx 200 0 0 – 2013-03-27 09:07:38

回答

0

的邏輯如下:

  1. 找到 「#Fields:」 註釋,找出列
  2. 的索引跳躍式以 「#」 開頭的註釋行
  3. 打印我們感興趣的是

代碼列:

#!/usr/bin/env python 
f = open('log.txt','r') 

columns = {} 

for line in f.readlines(): 
    if line.startswith('#Fields:'): 
     for index, substring in enumerate(line.split(' ')): 
      columns[substring] = index 
    elif line.startswith('#'): 
     continue 
    else: 
     print line.split(' ')[columns['cs(User-Agent)']] 
+0

它確實很有效......非常感謝! :) – 2013-03-27 09:15:33

+0

你是否理解所有的代碼或者你是否需要進一步的解釋? – boxed 2013-03-27 09:16:54

+0

請解釋一下,實際上「枚舉」是做什麼的?謝謝。 – 2013-03-27 09:20:08