2015-02-07 114 views
0

我試圖從github url中讀取日誌文件,使用IP作爲查找鍵添加一些地理信息,然後將一些日誌信息和地理信息寫入文件。我已經從日誌中讀取和寫入文件,但我不確定使用什麼庫來查找IP地址的座標等,也不知道如何真正瞭解這部分內容。我找到了正則表達式模塊,當我開始理解它時,我發現它已被棄用。這就是我所得到的,任何幫助都會很棒。使用Python解析Apache日誌2.7

import urllib2 
apacheLog = 'https://raw.githubusercontent.com/myAccessLog.log' 

data = urllib2.urlopen(apacheLog) 
for line in data: 
    with open('C:\LogCopy.txt','a') as f: 
     f.write(line) 
+0

所以,你現在試圖解析「C:\ LogCopy.txt」?顯示你有什麼*嘗試*。 – 2015-02-07 19:27:13

+0

我正在從github上的文件寫入C:\ LogCopy.txt。操作將在我寫入LogCopy之前發生。我不知道用什麼來排隊,除了一些凌亂的切片,也許。它看起來像文件是通用日誌格式,我認爲我可以使用%x來拉出部分,但我不知道這只是用於正則表達式或什麼。我只是不知道從哪裏開始。我並不是在尋求答案,只是朝着正確的方向前進。 – RagePwn 2015-02-07 19:39:48

+0

不知道你期望的輸出是相當不得不給出任何合理的答案,有一個你可以使用的重新模塊。 – 2015-02-07 19:47:57

回答

1
  1. re module未過時,並且是標準庫的一部分。 編輯:here's the link爲2.7模塊
  2. 您的for循環打開和關閉文件在每次迭代。可能不是什麼大不了的事情,但大文件打開文件一次並寫出需要寫入的內容可能會更快。只需交換forwith行的位置即可。

所以

data = urllib2.urlopen(apacheLog) 
for line in data: 
    with open('C:\LogCopy.txt','a') as f: # probably need a double backslash 
     f.write(line) 

變得

data = urllib2.urlopen(apacheLog) 
with open('C:\LogCopy.txt','a') as f: # probably need a double backslash 
    for line in data.splitlines(): 
     f.write(line) # might need a newline character 
     # f.write(line + '\n') 
  • Similar question regarding geolocation Python library
  • 好運!

    編輯:加入data.splitlines()調用讀彼得·肯帕的回答

    +0

    謝謝你,安迪。我會開始工作。 – RagePwn 2015-02-07 19:52:39

    1

    好第一部分是簡單了。只要使用for line in data.split('\n'),假設這些行以正常的換行符結束(他們應該)。

    然後你使用re模塊(import re) - 我希望它仍然在python 2.7中使用...你可以用類似於re.search(r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", line)的東西來提取IP地址,查看re.search()函數以獲得詳細信息如何使用它。

    至於地理定位IP,它已經問我想,試試這個問題:What python libraries can tell me approximate location and time zone given an IP address?

    +0

    糟糕,我們發佈了兩個類似的答案:)關於在循環外部移動「open()」的部分在另一個答案中是一個很好的建議,你也應該遵循它! – 2015-02-07 19:52:25