__init__ методы автозапуска в Python - PullRequest
1 голос
/ 10 марта 2020

я пытаюсь разобрать rss и сделать df из них по определенным словам

мой код состоит из 4 частей

часть 1, функция инициализации

class News:
        def __init__(self, rss_dict, t1, t2, filename):
            self.rss_dict = rss_dict
            self.t1 = t1
            self.t2 = t2
            self.filename = filename
            self.print_headlines_test()
            self.write_and_read()
            self.certain_words()

Часть 2 (это метод class News), Получить метод заголовка

def print_headlines_test(self):
        for key,url in self.rss_dict.items():
            feed = feedparser.parse(url)

        headlines = []

        allheadlines = []

        for newsitem in feed['items']:
            headlines.append(newsitem['title'])

        for key,url in self.rss_dict.items():
            allheadlines.extend(headlines)
        self.allheadlines = allheadlines

Часть 3 (это метод class News), записать в CSV-файл все новости и прочитать его в pandas

 def write_and_read(self):
        header = ['Tittle'] 

        with open(self.filename, 'w', encoding='utf-8-sig') as csvfile:
            writer = csv.writer(csvfile, delimiter=',')

            writer.writerow(i for i in header) 

            for a  in zip(self.allheadlines):
                writer.writerow((a))


            df = pd.read_csv(self.filename)

        self.df = df

        return df

Часть 4 (это метод class News), поиск в pandas фрейме данных по определенным словам

def certain_words(self):
        result = self.df.apply(lambda x: x.str.contains(self.t1, na=False,
                                    flags = re.IGNORECASE, regex=True)).any(axis=1)
        result2 = self.df.apply(lambda x: x.str.contains(self.t2, na=False,
                                    flags = re.IGNORECASE, regex=True)).any(axis=1)
        return self.df[result&result2]

моя цель - автозапуск (автозапуск) my three methods: print_headlines_test, write_and_read и certain words всего на

c = News(my_dict_of_rss, target1,target2,'filename.csv') с методом __init__, но это ничего мне не возвращает как output

, когда я использую

c = News(my_dict_of_rss,target1,target2,'filename.csv')

и c.print_headlines_test() или c.write_and_read() или c.certain_words() отдельно, это работает

TL; DR имеют метод 1 __init__ и 3 other methods в class, почему они не запускаются автоматически при запуске объекта class со всеми arguments, но при запуске отдельно?

где моя вина?

1 Ответ

1 голос
/ 10 марта 2020

Я уверен, что мы можем заставить ваш класс работать. Ваш код работает прямо сейчас, но, поскольку вам кажется, что вас интересует только возвращаемое значение из certain_words(), то, возможно, его придется вызывать отдельно:

class News:
    def __init__(self, rss_dict, t1, t2, filename):
        # init elided, but just these two functions called
        self.print_headlines_test()
        self.write_and_read()

    def print_headlines_test(self):
        # processing elided, except:
        self.allheadlines = allheadlines

    def write_and_read(self):
        # processing elided, except the next line (Note no return)
        self.df = df

    def certain_words(self):
        # processing elided, except for this return
        return self.df[result & result2]

# client code is now two lines:
c = News(my_dict_of_rss, target1, target2, 'filename.csv')
words = c.certain_words()

# If you don't care about keeping the instance 'c' around, then you can do it in one line:
words = News(my_dict_of_rss, target1, target2, 'filename.csv').certain_words()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...