在Python中循环并在子例程之后保持当前行

时间:2011-06-29 04:52:00

标签: python

在python 3中循环时,我一直在努力解决问题。 从子例程返回时,“line”变量没有增加。

如何让脚本从中返回最新的readline subsroutine?

以下代码

def getData(line):
      #print(line)
      #while line in sTSDP_data:
      while "/service/content/test" not in line:
            line = sTSDP_data.readline()

import os, sys

sFileTSDP = "d:/ess/redo/Test.log"
sTSDP_data = open(sFileTSDP, "r")

for line in sTSDP_data:
      if "MOBITV" in line:
            getData(line)   #call sub routine
            print(line)

我正在逐步浏览一个大文件,并且需要调用某个字符串 处理接下来的5(或100)行数据的子例程。当子例程完成并返回主程序时,最好从最后一个继续 子例程中的readline,而不是主程序中的最后一行readline。

Daan的回答就是这个伎俩。

2 个答案:

答案 0 :(得分:3)

如何使用return语句?

def getData(line):
      #print(line)
      #while line in sTSDP_data:
      while "/service/content/test" not in line:
            line = sTSDP_data.readline()
      return line

import os, sys

sFileTSDP = "d:/ess/redo/Test.log"
sTSDP_data = open(sFileTSDP, "r")

for line in sTSDP_data:
      if "MOBITV" in line:
            line = getData(line)   #call sub routine
            print(line)

注意变量的范围。 getData函数中的'line'与循环中的'line'不同。

答案 1 :(得分:1)

嗯,作业不能通过参考。这意味着如果您在一个函数中重新分配变量,那么它将不会修改另一个函数中的值(除非存在globalnonlocal等特定异常。 (请注意:这是重新分配,而不是修改。如果修改列表,所有对列表的引用都被“修改”)。

只需将return line放在getData(line)的末尾

即可
def getData(line):
      #print(line)
      #while line in sTSDP_data:
      while "/service/content/test" not in line:
            line = sTSDP_data.readline()
      return line