使用 Python 2.7 解析 Apache 日志

Parse Apache log with Python 2.7

我正在尝试从 github url 中读取日志文件,使用 IP 作为查找键添加一些地理信息,然后将一些日志信息和地理信息写入一份文件。我已经从日志中读取和写入文件,但我不确定要使用什么库来从 IP 地址查找坐标等,也不知道如何真正处理这部分。我找到了 regex 模块,当我开始理解它时,我发现它已被弃用。这是我得到的,任何帮助都会很棒。

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)
  1. 2.7 模块的re module isn't deprecated, and is part of the standard library. Edit: here's the link
  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')
  1. Similar question regarding geolocation Python library

祝你好运!

编辑: 在阅读 Piotr Kempa 的回答后添加了 data.splitlines() 调用

嗯,第一部分很简单。只需使用 for line in data.split('\n') 假设行以正常的换行符结尾(他们应该)。

然后你使用 re 模块(导入 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?