Python:逐行迭代.txt文件

时间:2015-06-05 18:13:28

标签: python file object iteration

我有一个类,它读取.txt文件并执行一些不同的功能。我在下面提供了我的代码示例。

class Example(object):
  def __init__(self,fileName):
    self.file = open(fileName)

  def function_a(self):
    for line in self.file:
      for char in line:
        #Do some things

  def function_b(self):
    for line in self.file:
      for char in line:
        #Do some other things

当我创建对象并调用function_a或function_b时,一切都很完美。但是,如果我在调用function_a之后调用function_b(或反之亦然),则调用的第一个函数将完美,但第二个函数的作用就像self.file为空。

我只能假设self.file中嵌入了某种计数器或指针,它已由我的第一个函数激活,现在位于文件的末尾。因此,当我尝试调用第二个函数时,它会选择指针所在的位置,并且在注意到没有剩余的行之后,它会返回而没有任何错误。

假设我无法将function_a和function_b组合在一起同时执行它们的动作,如何重置self.file以便当我尝试第二次迭代它时它会从头开始?

或者我的假设是错误的,还有其他事情在继续?

2 个答案:

答案 0 :(得分:3)

在遍历文件后,您需要告诉它回到开头。

self.file.seek(0)

应该做你想要的。

答案 1 :(得分:2)

self.file是一个迭代器,只能使用一次。 这意味着您在function_a上迭代后, 它无法在function_b中使用它。 我认为一个好的解决方案是将文件存储在一个列表中,即

def __init__(self, fileName):
    with open(fileName, 'r') as f:
        self.file_list = f.readlines()

如果文件不是很大,这应该可以工作,否则你也可以使用f.seek(0)将文件指针设置为文件的开头。