Как быстрее загрузить мой файл журнала в датафрейм? Вот код и вывод, спасибо. Я написал код для извлечения логов из файла и добавления их к кадру данных, но он очень длинный, потому что у меня сотни тысяч строк ...
import re
import pandas as pd
APACHE_LOG_PATTERN = '^(\S+) (\S+) (\S+) \[([\w:/]+\s[+\-]\d{4})\] \"(\S+) (\S+)\s*(\S+)?\s*\" (\d{3}) (\S+)'
cols = ['host', 'client_id', 'user_id', 'date_time', 'method', 'endpoint', 'protocol', 'response_code', 'content_size']
file = 'access.log'
f = open(file, "r")
df_all = pd.DataFrame(columns=cols)
for i,l in enumerate(f):
print(i,end='\r')
if i == 0:
pass
elif i == 10:
break
else:
match = re.search(APACHE_LOG_PATTERN, l)
host = match.group(1)
client_id = match.group(2)
user_id = match.group(3)
date_time = match.group(4)
method = match.group(5)
endpoint = match.group(6)
protocol = match.group(7)
response_code = int(match.group(8))
content_size = match.group(9)
data_dic = {"host":[host], "client_id":[client_id], "user_id":[user_id],
"date_time":[date_time], "method":[method], "endpoint":[endpoint],
"protocol":[protocol], "response_code":[response_code], "content_size":[content_size]}
df = pd.DataFrame(data_dic)
df_all = df_all.append(df, ignore_index = True)
print(df_all.size)
df_all.head()
Вывод:
host client_id user_id date_time method endpoint protocol response_code content_size
0 109.169.248.247 - - 12/Dec/2015:18:25:11 +0100 GET /administrator/ HTTP/1.1 200 4263
1 109.169.248.247 - - 12/Dec/2015:18:25:11 +0100 POST /administrator/index.php HTTP/1.1 200 4494
2 46.72.177.4 - - 12/Dec/2015:18:31:08 +0100 GET /administrator/ HTTP/1.1 200 4263
3 46.72.177.4 - - 12/Dec/2015:18:31:08 +0100 POST /administrator/index.php HTTP/1.1 200 4494
4 83.167.113.100 - - 12/Dec/2015:18:31:25 +0100 GET /administrator/ HTTP/1.1 200 4263