【问题标题】:Python: Iterating over .txt file line by line multiple times [duplicate]Python:多次逐行迭代.txt文件[重复]
【发布时间】:2015-08-20 19:06:30
【问题描述】:

我有一个类可以读取 .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 以便当我第二次尝试迭代它时它会从头开始?

或者我的假设是错误的,还有其他事情发生了吗?

【问题讨论】:

    标签: python file object iteration


    【解决方案1】:

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

    self.file.seek(0)
    

    应该做你正在寻找的东西。

    【讨论】:

    • 这绝对是更好的方法(可扩展)
    【解决方案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) 将文件指针设置为文件的开头。

    【讨论】:

      猜你喜欢
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多