【问题标题】:Python 3, increment iteratorPython 3,增量迭代器
【发布时间】:2013-08-24 08:57:45
【问题描述】:

我正在逐行处理文件。检查每一行是否包含给定的文本。然后,下一行需要赋值给变量

i_line = iter(file)
for i_line in file:
    if text in i_line:
         #Go to the next line
         line = next(i_line, None) #A problem
         break

如何增加迭代器 i_line 以指向文件的下一行?两种结构都不适合我

next(i_line, None)
i_line.next()

【问题讨论】:

  • i_line 只是一个常规字符串,不是任何类型的迭代器,尤其与file 的内部无关。
  • “下一行需要赋值给变量”,你的意思是要记录下一行供以后处理,还是要前进到下一个循环迭代?跨度>
  • 分配i_line = iter(file) 不会改变将i_line 用作循环变量时的解释方式。您可能想重新了解for 循环的工作原理。

标签: python iterator increment


【解决方案1】:

只要next(f)

类似

>>> with open('testFile.txt', 'r') as f:
        for line in f:
            if 'cat' in line:
                final_string = next(f)

所以,对于

的输入文本文件
My Name is ABC.
I am a male.
My pet is a cat.
It's name is Ronald.
I hate rats.

以上代码给出

>>> final_string
"It's name is Ronald.\n"

【讨论】:

    【解决方案2】:

    使用line = file.next() 代替line = next(i_line, None)

    【讨论】:

      【解决方案3】:

      这是一种使用next() 处理文件的方法。

      with open(filename) as file:
          line = next(file, None)
          while line:
              print(line.strip())
              line=next(file, None)
      

      同时使用 for line in file 迭代器和 next 将打印每隔一行:

      with open(filename) as file:
          for line in file:
              print(line.strip())
              line = next(file,None)
      

      【讨论】:

        猜你喜欢
        • 2014-04-04
        • 1970-01-01
        • 1970-01-01
        • 2011-05-06
        • 1970-01-01
        • 2014-05-24
        • 1970-01-01
        • 2018-07-14
        • 1970-01-01
        相关资源
        最近更新 更多