0 / 0 / 0
Регистрация: 08.06.2017
Сообщений: 8
1

Реализовать алгоритм обработки текстового файла

20.02.2018, 22:27. Показов 926. Ответов 8

Привет уважаемому сообществу!

Нужно обработать 12 ГБ логов, задача одноразовая, хочу сделать это на Python.
Языка пока не знаю, но если поможете, потом что-то небольшое буду допиливать сам.

Итак, есть файлы с 4 видами строк: (файл всегда начинается с PERS=....)
Пустая - их игнорировать
PERS="VyrezaemEtotTExt";"Ar... из таких строк запоминать в переменную zaptext='VyrezaemEtotTExt'
EXP="/p/Tee-Bld/10000346";prf="... в таких строках ничего менять не надо
AFF="Techno Com";"/c/no... в начало такой строки надо вставить AF2=" и вырезанный ранее текст "VyrezaemEtotTExt" и потом вся строка без изменений.
Каждую строку нужно копировать в выходной файл (некоторые после обработки), пустые строки - не надо.

ЦИКЛ1 -по всем файлам *.txt в директории скрипта
Открываем файл на чтение FILE.txt
Открываем на запись файл FILE.out (тоже имя файла, но расширение out)
zaptext =""
ЦИКЛ2 -чтения input.txt построчно в строку string
если string начинается с PERS= , то в переменную zaptext записываем кусок от PERS=" до ближаейшей "; (VyrezaemEtotTExt в примере выше)
если string начинается с EXP= - ничего не делаем
если string начинается с AFF=, то string = 'AF2=' + zaptext +'";"' + string

если строка string не пустая - вывод её в файл output.txt
конец ЦИКЛ2
Тут можно вывести подсчет количества строк каждого вида (не обызательно)
конец ЦИКЛ1

Задача простая, но у меня уйдет на неё больше чем полдня, помогите пожалуйста
С уважением, Сергей
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.02.2018, 22:27
Ответы с готовыми решениями:

Реализовать нейросетевой алгоритм обработки сигналов
подскажите как

Программа обработки текстового файла
Помогите написать программу на Си! Дано: Текстовый файл inString.txt содержит список (столбец)...

Составить текст программы обработки текстового файла
Составить текст программы обработки текстового файла 1. Содержащий процедуру создания нового...

Разработайте алгоритм и программу, реализующую этот алгоритм. Исходные данные вводите из текстового файла. Результаты работы программы также помести
Разработайте алгоритм и программу, реализующую этот алгоритм. Исходные данные вводите из...

8
1288 / 905 / 479
Регистрация: 05.12.2013
Сообщений: 3,039
20.02.2018, 22:35 2
Каждый файл txt какого размера?
0
0 / 0 / 0
Регистрация: 08.06.2017
Сообщений: 8
21.02.2018, 00:31  [ТС] 3
От 500Мб до 5 Гб,
можно не делать цикл по всем файлам в каталоге, просто давать 1 файл на вход скрипту, я поштучно их обработаю.
0
Модератор
2968 / 2107 / 450
Регистрация: 26.03.2015
Сообщений: 8,230
21.02.2018, 00:46 4
Цитата Сообщение от ТабуретY Посмотреть сообщение
Каждый файл txt какого размера?
Не проблема. Главное, не читать их целиком - читать построчно и сразу записывать в выходной файл.
2
0 / 0 / 0
Регистрация: 08.06.2017
Сообщений: 8
21.02.2018, 01:13  [ТС] 5
Помогите мне с кодом цикла2, пожалуйста. Скорость работы скрипта не важна...
0
826 / 613 / 244
Регистрация: 10.12.2016
Сообщений: 1,518
21.02.2018, 01:17 6
попробуй такой вариант
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#log.py
'''
usage: python log.py infile.txt
'''
import sys
infile = sys.argv[1]
outfile = infile.split('.')[0] + '.out'
with open(infile) as f_in,open(outfile,'w') as f_out:
    tmp = ''
    for row in f_in:
        if row.startswith('PERS'):
            tmp = row.split(';')[0].split('=')[1]
        elif row.startswith('AFF') and tmp:
            f_out.write('AF2='+tmp + ';' + row)
            tmp=''
        elif row.strip():
            f_out.write(row)
1
0 / 0 / 0
Регистрация: 08.06.2017
Сообщений: 8
21.02.2018, 01:23  [ТС] 7
Спасибо!
Красивый код, насколько я начал понимать в Python'e будет делать как раз то, что надо!
Непривычно, что циклы на Питоне непонятно как заканчиваются )
Завтра проверю на свежую голову!
0
826 / 613 / 244
Регистрация: 10.12.2016
Сообщений: 1,518
21.02.2018, 01:34 8
заканчиваются отступами
ты лучше прикрепи реальный файл строк 50
1
0 / 0 / 0
Регистрация: 08.06.2017
Сообщений: 8
21.02.2018, 11:44  [ТС] 9
Все отлично работает, практически со скоростью чтения диском!
Внес небольшие изменения - одну строку добавил, другую убрал

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#log.py
'''
usage: python log.py infile.txt
'''
import sys
infile = sys.argv[1]
#infile='1.txt'
outfile = infile.split('.')[0] + '.out'
with open(infile) as f_in,open(outfile,'w') as f_out:
    tmp = ''
    for row in f_in:
        if row.startswith('PERS'):
            tmp = row.split(';')[0].split('=')[1]
            f_out.write(row)   # добавил вывод строки с PERS
        elif row.startswith('AFF') and tmp:
            f_out.write('AF2='+tmp + ';' + row)
            #tmp=''  # убрал, так как нового PERS не было еще  
        elif row.strip():
            f_out.write(row)
СПАСИБО ЕЩЕ РАЗ!

Добавлено через 1 час 29 минут
20 ГБ логов обработал за 8 минут!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2018, 11:44
Помогаю со студенческими работами здесь

Создание внешней обработки для загрузки текстового файла
Пожалуйста выручайте,никак не получается сделать.пробовала и так и сяк уже Задание: 1.На форме...

Придумать и реализовать алгоритм шифрования текста (использовать функции обработки символов и строк)
5)Придумать и реализовать алгоритм шифрования текста (использовать функции обработки символов и...

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

Реализовать программу обработки файла, записав туда данные
Реализовать программу обработки файла, записав туда данные: ФИО, год рождения. Прочитать файл и...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru