основной вопрос конструктора python

#python #constructor

#python #конструктор

Вопрос:

Я пытаюсь повторно использовать открытый файл, который объявлен внутри экземпляра конструктора класса, но я предполагаю, что я делаю что-то логически неправильное. Например, рассмотрим следующий пример

 class Temp:
    def __init__(self):
        self.open_file_ = open('periodic_status','r')

    def function1(self):
        new_file = self.open_file_
        for i in new_file:
            print 'test1'

    def function2(self):
        for j in self.open_file_:
            print 'test2'

if __name__ == '__main__':
    obj1 = Temp()
    obj1.function1()
    obj1.function2()
  

В приведенной выше программе я могу напечатать test1, но я не могу напечатать инструкцию test2. Может ли кто-нибудь объяснить мне логику.

Спасибо

Ответ №1:

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

 f.seek(0)
  

чтобы начать все сначала

Смотрите здесь docs.python.org

Комментарии:

1. Хорошо, но как проверить, исчерпал ли я все строки в файле?

Ответ №2:

Копирование ссылки не создает новый итератор; первый раунд итерации использует весь файл, не оставляя ничего для второго. Вам нужно вернуться к началу, если вы хотите прочитать его снова.

Комментарии:

1. верно, не могли бы вы объяснить мне, как выполнить поиск обратно к началу файла.

Ответ №3:

Вы должны добавить open_file_.seek(0) в начале функции, чтобы вернуть позицию файла в начало (она находится в конце файла после прочтения всего этого в function1()).