2016-04-12 2 views
2

コードが2番目のforループに入っていません。私はどこでもファイル記述子を変更していません。なぜそれが起こっているのですか?forループが同じファイル記述子で2回動作しない

import os 
import re 

path = '/home/ajay/Desktop/practice/ajay.txt' 
os.system('ifconfig>>path') 
fd = open(path,'r+') 
interfaces = [] 
tx_packets = [] 

for line in fd: 

    if(re.search(r'(\w+)\s+\Link',line)): 
    inter = re.match(r'(\w+)\s+\Link',line) 
    interface = inter.group(1) 
    interfaces.append(interface) 

for lines in fd: 

    if(re.search(r'\s+TX packets:(\d+)',lines)): 
     tx_packs = re.match(r'\s+TX packets:(\d+)',lines) 
     tx_pack = tx_packs.group(1) 
     tx_packets.append(tx_pack) 


print interfaces 
print tx_packets 
+0

を使用してください。 'for lines in fd:'は、ファイルの最後に読み込みポインタなどを置くためです。あなたの 'for 'ループの間で' fd.seek(0) 'を呼び出す – jDo

答えて

1

for lines in fd:は、ファイルの最後に読み込みポインタ、ファイルポインタなどを配置します。それはStopIterationを上げるまでfd.next()を呼び出すことによって、あなたのforループ

3

これは、ファイルポインタがファイルの最後に達しているためです。したがって、次の反復の前にファイルの先頭に戻す必要があります。これを2番目のループの前に入れてください。

fd.seek(0) 

入力/出力hereのチュートリアルを確認してください。 seekについての部分:

ファイルオブジェクトの位置を変更するには、f.seek(offset、from_what)を使用します。

2

forループ作品の間でfd.seek(0)を呼び出します。 2回目にそれを繰り返すと、ファイルはすでに終了しています。最初に戻るには、fd.seek(0)

関連する問題