2016-09-28 8 views
1

最近列挙型関数の開始パラメータに関して少し混乱します。私は最近Pythonで作業を開始しました。 iは、以下の例のファイルがあると :列挙型のPythonでStartパラメータを指定したときに不正な行番号が返される

Test 1 
Test 2 
Test 3 

これは、このメッセージの端部が第6行[SB WOM]|[INTERNAL REQUEST]|[END]あるメッセージ

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

の開始である最初の行[SB WOM]|[INTERNAL REQUEST]|[START]であるが

今、私は以下のコードを実行する:

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ではなく、開始パラメータがどのように2番目の部分の違いになるかループ。

答えて

0

2番目のforループを実行すると、ファイルイテレータオブジェクトは最初の4行を読み込んだため、停止した場所から開始します。前の反復は、(我々が0からカウントを開始すると仮定して)3行目で停止し、ループの次のライン4

から始まるインデックスx1の行があったとしてしたがって、第2のループのenumeratex1 + 1ないx1から始めるべき以前のループですでにカバーされています。最初のループの最後の行:

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

上記のような行がある非常に大きなファイルであると仮定し、上記のケースのシナリオを手伝ってもらえますか?入力を「ID = 123456」とすれば、私は "START"から "END"までのすべての行を印刷する必要があります。 –

+0

新しい質問として投稿した方が良いと思います。 –

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の2番目のパラメータを何?まあ、それはenumerateのインデックスの開始値です。繰り返し可能な変数xは最初から再び列挙されるが、異なる反復におけるiの値はstの値だけシフトされる。その代わりなど0、1、2、としてiの値を持つことの

は、我々が持っている4、5、6、など

私はあなたのコードに誤った行番号を持っている理由は説明すると思います。

+0

このような素晴らしい説明のためにありがとう、間違いなく私はコードの仕組みを理解することができます。ファイルのどこかに上記の行がある非常に大きなファイルであると仮定すると、 "ID = 123456"と入力すると、 "START"から "END"までのすべての行が表示されます。 –

関連する問題