#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()).