在枚举Python中指定Start参数时返回的行号不正确

时间:2016-09-28 11:20:46

标签: python

我对枚举函数中的start参数有点混淆,因为我最近开始使用python我不知道它应该如何工作。 假设我有一个示例文件:

Test 1
Test 2
Test 3

这是第一行[SB WOM]|[INTERNAL REQUEST]|[START],它是消息的开头

Name : Vaibhav
Designation : Technical Lead
ID : 123456
Company : Nokia

这是第六行[SB WOM]|[INTERNAL REQUEST]|[END],它是消息的结尾

现在我运行以下代码:

path =("C:/Users/vgupt021/Desktop")
in_file = os.path.join(path,"KSClogs_Test.txt")
fd = open(in_file,'r')
for linenum,line in enumerate(fd) :
    if "[SB WOM]|[INTERNAL REQUEST]|[START]" in line:
        x1 = linenum
        print x1
        break 
for linenum,line in enumerate(fd,x1):
    if "[SB WOM]|[INTERNAL REQUEST]|[END]" in line:
        print linenum
        break

我得到的亚麻布返回为3和7,我不清楚为什么它不会返回为3,8。因为行"[SB WOM]|[INTERNAL REQUEST]|[END]"的索引号是8而不是7,start参数如何使循环第二部分的差异。

2 个答案:

答案 0 :(得分:0)

由于文件迭代器对象已读取前四行,因此在运行第二个for循环时,它从停止的位置开始。前一次迭代在第3行停止(假设我们从0开始计数),下一个for循环从第4行开始。

因此,第二个循环的enumerate应该从x1 + 1而不是x1开始,因为索引x1的行已在前一个循环中涵盖;第一个循环的最后一行:

for linenum, line in enumerate(fd, x1+1):
    ...

答案 1 :(得分:0)

试试此代码

x = range(10)
for i, e in enumerate(x):
    if i == 4:
        print i
        st = i
        break

for i, e in enumerate(x, st):
    print i

你会看到这个输出:

4
4 5 6 7 8 9 10 11 12 13

那么,enumerate的第二个参数是什么?好吧,它是enumerate索引的起始值。可迭代变量x从头开始再次枚举,但不同迭代的i值会移动st的值。

我们不是将i的值设为0,1,2等,而是有4,5,6等等。

我认为这可以解释为什么代码中的行号不正确。