Более быстрый способ загрузки файла в датафрейм с добавлением - PullRequest
0 голосов
/ 15 марта 2020

Как быстрее загрузить мой файл журнала в датафрейм? Вот код и вывод, спасибо. Я написал код для извлечения логов из файла и добавления их к кадру данных, но он очень длинный, потому что у меня сотни тысяч строк ...

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
...