如何使用嵌套循环正确迭代文件

时间:2017-05-02 03:57:07

标签: python loops

我希望阅读文件,直到我找到某个标记,在此示例中是一行包含字符串" item":

file.txt的

data
data
data
<item1
  data foo
  data bar
>
otherdata
<item2
  data bar
>
otherdata
<item3
  data foo
>
otherdata

一旦我到达&#34; item&#34;然后我想阅读每个项目块中包含的数据部分,但我认为使用另一个循环处理数据最有意义,因为我必须多次执行相同的处理。  我不知道的是,我是否应该使用相同的循环计数器作为内部和外部循环,如下所示:

with open("file.txt") as myFile:  
    for strLine in myFile:
        if "item" in strLine:
            for strLine in myFile: #using same counter as outer loop
                processitemdata()
                if ">" in strLine:
                    break 

或者像这样的另一个:

with open("file.txt") as myFile:  
    for strLine in myFile:
        if "item" in strLine:
            for x in myFile: #using different counter than outer loop
                processitemdata()
                if ">" in strLine:
                    break 

那么奇怪的是,无论我是使用相同的循环计数器(正确的名称?)还是内部和外部循环,或者是嵌套循环的不同计数器,它们都能正常工作。

另外,我不确定Python如何知道如何进入文件的下一行而不是重新开始,但是我猜测每次访问时都会有一些更新行计数器的子系统来自myFile的一行?

循环遍历文件对象然后在同一个文件对象上循环嵌套循环就好像它会以某种方式重置行计数器一样感觉很奇怪,但它显然可以正常工作,因为Python无论嵌套了多少都似乎都在跟踪我使用的循环。我只是想确保我没有做出本来就错误或使用不良风格的事情。我确实理解使用while循环可能对内循环更有意义,但这是我最初编写的方式,并没有感觉要重写它。

1 个答案:

答案 0 :(得分:0)

Select distinct [invoiceDate], [invoiceTo], [InvoiceAddress], [etc] FROM [invoicelines] 循环基本上只是说

for

反复提出strLine = next(myFile)

以这种方式嵌套循环很好。我通常会使用额外的一行(StopIteration)来保存额外的缩进级别。

continue

除此之外:您确定“项目”不会出现在任何数据行中吗?