2011-05-24 125 views
1

我想重用一个打开的文件,这是在一个类的构造函数实例中声明的,但我想我在做一些逻辑错误的事情。例如考虑下面的例子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。有人能解释我的逻辑吗?

谢谢

回答

3

因为您的文件句柄耗尽了文件中的所有行。你需要倒带在“功能2”使用:

f.seek(0) 

开始重新

看到这里docs.python.org

+0

好吧,但如何检查我是否用尽了文件中的所有行? – Tadeck 2011-05-24 22:12:15

+0

使用'f.tell()',读取您提供的链接 – 2011-05-24 22:17:54

2

复制引用不会创建新的迭代器;第一轮迭代消耗整个文件,第二轮不留。如果你想再次阅读,你需要回头看看。

+0

是真的,你能解释一下如何找回文件的开头。 – Rkz 2011-05-24 22:10:26

+0

http://docs.python.org/library/stdtypes.html#file-objects – 2011-05-24 22:11:04

1

你应该在函数的开头添加open_file_.seek(0)到文件位置重置为开头(它在函数1()中读完后在文件末尾)。