使用 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)
- 2.7 模块的re module isn't deprecated, and is part of the standard library. Edit: here's the link
- 您的
for
循环在每次迭代时打开和关闭文件。可能没什么大不了的,但是对于大文件来说,打开一次文件并写入需要写入的内容可能会更快。只需交换 for
和 with
行的位置。
所以
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
祝你好运!
编辑: 在阅读 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?
我正在尝试从 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)
- 2.7 模块的re module isn't deprecated, and is part of the standard library. Edit: here's the link
- 您的
for
循环在每次迭代时打开和关闭文件。可能没什么大不了的,但是对于大文件来说,打开一次文件并写入需要写入的内容可能会更快。只需交换for
和with
行的位置。
所以
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
祝你好运!
编辑: 在阅读 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?