0 / 0 / 0
Регистрация: 01.05.2014
Сообщений: 69
Записей в блоге: 3

Обработка текстовых файлов (логов) больших размеров

16.01.2015, 14:30. Показов 8445. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

Хочу написать "обработчик" текстовых логов.
Логи очень большие (к примеру бывают 20000 строк и больше).
Логи состоят из клиентских сессий, которые иногда приходится анализировать.

Что я собираюсь делать с файлом:

Открываю его для чтения.
Построчно в цикле "for" ищу ключевые слова "start" или "stop"
Если нашёл ключевое слово "start", то я начинаю добавлять все строки
начиная с текущей в список. Продолжаю до тех пор, пока не найду строку, которая содержит ключевое слово "stop".
Получается, что я на этот момент я имею список строк - который содержит одну клиентскую сессию.
Когда я нахожу слово "stop" я добавляю текущий список в ещё один список - общий.
А текущий список обнуляю , пока программа опять не найдет ключевое слово "start".
На выходе я вроде как получаю список списков - в теории это даёт возможность обращаться к каждой клиентской сессии отдельно.

Вот сам код. Само собой это просто набросок.
Просто мне интересно, стоит вообще в таком ключе подходить к решению проблемы.
Я понимаю, что всё это держать в памяти - очень тупо, поэтому собственно и спрашиваю:
Как лучше сделать?

И вообще стоило ли python'ом пытаться выполнить эту задачу?

Кликните здесь для просмотра всего текста


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
start_session = " start"
close_session = "CloseSession"
stop_session = "StopSession"
 
total = 0
session = []
current_session = []
 
erl_file = open("20150112.txt")
 
for line in erl_file:
 
    if start_session in line :
        total +=1
        current_session.append(line)
    #  print(line,"\n")        
 
    elif close_session in line :
        current_session.append(line)
        session.append(current_session)
        current_session = []
    #  print(line,"\n")
 
    elif stop_session in line :
        current_session.append(line)
        session.append(current_session)
        current_session = []
    #  print(line,"\n")
 
    else :
        current_session.append(line)
 
print(total)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.01.2015, 14:30
Ответы с готовыми решениями:

Замена строк в текстовых документах больших размеров
Дан текстовой документ размером в несколько гигабайт( больше миллиона строк) и номера двух строк, расположенных в произвольной части файла....

Обработка текстовых файлов. Обработка бинарных файлов. Сериализация и десериализация объектов
Запросить у пользователя необходимость повторения работы программы. В случае если пользователь желает повторить выполнение программы –...

Копирование файлов больших размеров
Задача состоит в том ,чтобы разделить большой файл на части и копировать их в отдельных потоках.Как можно это сделать?

5
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
16.01.2015, 16:21
Цитата Сообщение от Орехов Орех Посмотреть сообщение
Построчно в цикле "for" ищу ключевые слова "start" или "stop"
Приложение, которое пишет логи, однопользовательское? В любом случае, формат странный.
Цитата Сообщение от Орехов Орех Посмотреть сообщение
Я понимаю, что всё это держать в памяти - очень тупо
Зависит от задачи. Если, например, нужно считать среднюю продолжительность сессии, то весь лог в памяти не нужен.
0
0 / 0 / 0
Регистрация: 01.05.2014
Сообщений: 69
Записей в блоге: 3
16.01.2015, 17:10  [ТС]
Приложение, которое пишет логи, однопользовательское? В любом случае, формат странный.
Логи формируются по походу дела.
Просто иногда бывает необходимость эти логи проверить на наличие ошибок или просто какую-то информацию о проведенной операции посмотреть.
А на счёт странного формата я не понял
0
0 / 0 / 0
Регистрация: 18.03.2014
Сообщений: 24
16.01.2015, 17:15
Что-то в этом роде:
Python
1
2
3
4
5
6
7
8
9
10
OpenFileTXT = open(OutputFileTXT, 'w')
OpenLogForScan = open(CurrentLogFilePath, 'r')
bStart = 0
for Line in OpenLogForScan:         
           if 'START' in Line or bStart = 1:            
                OpenFileTXT.write(Line) 
                bStart = 1 
            if 'STOP' in Line:
                bStart = 0
                 continue
0
0 / 0 / 0
Регистрация: 01.05.2014
Сообщений: 69
Записей в блоге: 3
16.01.2015, 17:16  [ТС]
Зависит от задачи. Если, например, нужно считать среднюю продолжительность сессии, то весь лог в памяти не нужен.
В принципе, мне действительно не нужен весь лог - обычно необходимость есть только в паре клиентских сессий, в которых были ошибки.
С ними дальше и работаем : расписываем операции, которые выполнялись клиентом. оставляем важные из них, а ненужные строки удаляем.

Я просто думаю: как обычно вообще логи обрабатывают и анализируют?
т.е стоит ли списками (list) работать или есть что-то, более подходящее?
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
16.01.2015, 17:30
Цитата Сообщение от Орехов Орех Посмотреть сообщение
Логи формируются по походу дела.
Ок, пусть будет поток. Я спрашивал, могут ли параллельно быть активными несколько сессий или сессия в один момент времени всегда одна?
Цитата Сообщение от Орехов Орех Посмотреть сообщение
т.е стоит ли списками (list) работать или есть что-то, более подходящее?
Судя по описанию, задачи решаются простые, проблем возникнуть не должно.

Если нужна более сложная обработка, можно посмотреть на фреймворк pandas или инструменты типа logstash. Сам не пользовался, подробнее сказать не могу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.01.2015, 17:30
Помогаю со студенческими работами здесь

Получение из БД MSSQL файлов больших размеров
Имеется MS SQL 2000, в котором в поле типа image хранятся файлы. получаю из него файлы я следующим кодом на asp ------------ ...

Чтение файлов больших размеров >1Гб
Товарищи, подскажите как прочитать файл размером больше 1Гб.. у меня при чтении оперативка заканчивается и выдает ошибку.. как можно...

Чтение больших текстовых файлов
Здравствуйте. Пишу алгоритм Хаффмана на Pascal ABC, и столкнулся с такой проблемой. Алгоритм проявляет себя адекватно лишь с большими...

Загрузка больших текстовых файлов
Подскажите пожалуйста,как можно спроецировать файл в память (текстовый) и обработать его (необходимо удалить все дубликаты строк)...

Парсинг больших текстовых файлов
Добрый день! В общем столкнулся с задачей отпарсить текстовик на 4 миллиона строк (в примере код для пары тысяч строк). ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
Звёздная пыль
kumehtar 20.06.2025
Я просто это себе представляю: как создавался этот мир. Как энергия слипалась в маленькие частички. Как они собирались в первые звёзды, как во вселенной впервые появился Свет. Как эти звёзды. . .
Создание нейросети с PyTorch
AI_Generated 19.06.2025
Ключевое преимущество PyTorch — его питоновская натура. В отличие от TensorFlow, который изначально был построен как статический вычислительный граф, PyTorch предлагает динамический подход. Это. . .
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C# Задание 1: КЛАСС FORM 1 public partial class Form1 : Form { Spisok listin = new Spisok(); . . .
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru