我对枚举函数中的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参数如何使循环第二部分的差异。
答案 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等等。
我认为这可以解释为什么代码中的行号不正确。