Как сделать поиск по шаблону в текстовом файле, используя класс в Python

1

Я пытаюсь найти шаблон с помощью класса.

У меня есть пример текстового файла. Я должен найти строку поиска ("Debug_logs") в каждой строке текстового файла. Затем я должен распечатать дату поиска по шаблону, (\d\d\d\d-\d\d-\d\d)

Без использования класса я могу делать и получать отличные результаты.

Но как заставить его работать с классом и объектами.

import re

class text_processing:

    def __init__(self,file_name):
        print ("File opened")
        self.file_name = file_name
        self.search_pat = 'DEBUG Facebook'


    def search(self):
        print ("in sreach function")
        for line in self.file_name:
            print (line)
            if self.search_pat in line:
                print (self.line)
                for i in self.search_pat:
                    print re.findall(r"\d\d\d\d-\d\d-\d\d", self.search_pat)
                    break

def main():
    filename = 'sample1.txt'
    file_open = open(filename, "r")
    x = text_processing(file_open)
    x.search()
  • 1
    !!! прекратить использовать open (имя файла) - этот код типичный пример того, как забыть закрыть файл после его использования !!!! есть конструкция с open (filename) as ... которая закрывает ресурсы для вас! Также предпочитайте открывать файл (брать ресурсы), когда это нужно, а не в основном.
  • 0
    Я только что проверил ваш код, и он работает для меня, пока вы вызываете main ()
Показать ещё 5 комментариев
Теги:

1 ответ

1
Лучший ответ

Я не уверен, что это именно то, что вы хотите, чтобы это сделать точно, но я исправил проблемы с открытием файла и тому подобное (теперь объекту передается имя файла, и файл открывается только тогда, когда функция search() называется), и еще несколько вещей.

import re

class text_processing:

    def __init__(self,file_name):
        self.file_name = file_name
        self.search_pat = 'DEBUG Facebook'


    def search(self):
        print ("File opened")
        print ("in search function")
        with open(self.file_name, "r") as file:
            for line in file:
                print (line)
                if self.search_pat in line:
                    print (re.findall(r"\d\d\d\d-\d\d-\d\d", line))


def main():
    filename = 'sample1.txt'
    x = text_processing(filename)
    x.search()

main()

Прежде чем вы искали шаблон в self.search_pat, который является только текстом "DEBUG Facebook", так что он ничего не нашел. Вы также перебирали каждого персонажа в "DEBUG Facebook", и поэтому вы избыточно искали 14 раз, когда re.findall уже проходит и обнаруживает все вхождения.

Надеюсь, я понял, чего вы пытаетесь достичь правильно и помог вам :)

  • 0
    Спасибо, это работает и для меня ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню