我已经尝试了一段时间来拆分此服务器访问日志字符串,但无济于事。字符串以这种格式出现
10.223.157.186 - - [15 / Jul / 2009:15:50:35 -0700]" GET /assets/css/reset.css HTTP / 1.1" 200 1014
我使用过`str.split()和str(" \ t")但无济于事。谢谢你的帮助
答案 0 :(得分:2)
您需要使用regular expression
例如,如果你有这个:
import re
line = '10.223.157.186 - - [15/Jul/2009:15:50:35 -0700] "GET /assets/css/reset.css HTTP/1.1" 200 1014'
regexString = r'(?P<IP>[0-9.]+) (?P<ID>[\w-]+) (?P<user>[\w-]+) (?P<time>\[.*\]) (?P<request>".*") (?P<status>\d+) (?P<size>\d+)'
regex = re.compile(regexString)
match = regex.match(line)
if match != None:
ip = match.group('IP')
id = match.group('ID')
# etc.
如果你想从时间中提取每件事,即日,月,年等,那么你可以在match.group上运行另一个正则表达式(&#39; time&#39;)或者你可以更多在regexString中明确指出如何解析它
例如,您可以拥有:\[(?P<day>\d+)/(?P<month>[A-Za-z]+)/(?P<year>\d+):(?P<hour>\d+):(?P<minute>\d+):(?P<second>\d+) -(?P<zone>\d+)\]
这会让你:
regexString = r'(?P<IP>[0-9.]+) (?P<ID>[\w-]+) (?P<user>[\w-]+) \[(?P<day>\d+)/(?P<month>[A-Za-z]+)/(?P<year>\d+):(?P<hour>\d+):(?P<minute>\d+):(?P<second>\d+) -(?P<zone>\d+)\] (?P<request>".*") (?P<status>\d+) (?P<size>\d+)'