Основной вопрос конструктора Python

1

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

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. Может ли кто-нибудь объяснить мне логику.

Спасибо

Теги:
constructor

3 ответа

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

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

f.seek(0)

чтобы начать заново

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

  • 0
    Хорошо, но как проверить, исчерпали ли я все строки в файле?
  • 0
    используйте f.tell() , прочитайте ссылки, которые были вам предоставлены
2

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

  • 0
    правда, можете ли вы объяснить мне, как искать обратно в начало файла.
  • 0
    docs.python.org/library/stdtypes.html#file-objects
1

Вы должны добавить open_file_.seek(0) в начале функции в reset положение файла к началу (его в конце файла после прочтения всего в функции1()).

Ещё вопросы

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