Я пытаюсь повторно использовать открытый файл, который объявляется внутри экземпляра конструктора класса, но я предполагаю, что я делаю что-то логически неправильно. Например, рассмотрим следующий пример
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. Может ли кто-нибудь объяснить мне логику.
Спасибо
Поскольку ваш дескриптор файла исчерпал все строки в файле. Вам нужно перемотать его в "function2", используя:
f.seek(0)
чтобы начать заново
Смотрите здесь docs.python.org
Копирование ссылки не создает новый итератор; первый раунд итерации потребляет весь файл, не оставляя ни одного для второго. Вам нужно будет вернуться к началу, если вы хотите прочитать его снова.
Вы должны добавить open_file_.seek(0)
в начале функции в reset положение файла к началу (его в конце файла после прочтения всего в функции1()).
f.tell()
, прочитайте ссылки, которые были вам предоставлены