@dimjkee90

Как найти строки в файлах и изменить их с помощью python?

есть файлы с логами app.log.gz, которые лежат в /2022/месяц/год/, в логе нужно найти запись 'PASS" => '(3 случайных числа)', как пример 'PASS' => '564', нужно заменить случайные трехзначные числа на ***, чтобы получилось так 'PASS' => '***'
скрипт должен пробежаться по всем файлам в папках
в Python не силен, сделал начало скрипта, но застрял на re.search() как через него найти 'PASS' => '3 случайных числа', так же попробовал задать re.search(r'[0-9][0-9][0-9]' находится только одна запись в логе, дальше не ищет

import os.path
import gzip
import re


for root, dirs, files in os.walk("2022"):
    for file in files:
        if file.endswith('app.log.gz'):
            path_file = os.path.join(root, file)
            with gzip.open(path_file, 'rb') as oldfile:
                oldfile = str(oldfile.read())
                data = re.search(r'[0-9][0-9][0-9]', str(oldfile))
                print(data)
                вывод <re.Match object; span=(16, 19), match='202'>

                #with gzip.open(path_file + 'new', 'w') as newfile:
                #    newfile.write(oldfile).
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
@PavelMos
re.search(r'[0-9][0-9][0-9]',
Этот регексп ищет просто 3 цифры подряд. Даже если цифр подряд более чем три.
Для замены 'PASS' => '564' на 'PASS' => '***' с помощью регекспов нужно

import re
str1="'PASS' => '564'  xxxxx " #на самом деле тут будет полная строка из реального файла
re1="(.*\'PASS\'\s\=>\s\')\d{3}\'(.*)"    #Самофикс - - чтобы читать от начала строки до трёх цифр про пасс и потом до конца строки
str2=re.sub(re1,"\\1***\'\\2",str1)  #сохранить то, что в первых и вторых скобках в регекспе, и добавить к этому три звездочки, вместо трёх цифр
print (str2)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019
Bigdata Engineer
Тебе нужно каждый файл на лету распаковывать читать построчно. Применять к строке замену. И создавать файл-копию и тут-же писать в него и запаковывать обратно.

Оригиналы архивов потом можно удалить. Лучше всего это делать в разных директориях чтоб не запутаться.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы