2017-02-09 1 views
0

こんにちは私は学校のプロジェクトにライブ情報画面を作ろうとしています 私はそれが何行目にあるのかによって大きく異なるファイルを読んでいます。コード内で見られるようにテキスト文書の次の行を読む

dclist = [] 
interface = "" 
vrfmem = "" 

db = sqlite3.connect('data/main.db') 
cursor = db.cursor() 
cursor.execute('''SELECT r1 FROM routers''') 
all_rows = cursor.fetchall() 
for row in all_rows: 
    dclist.append(row[0]) 


for items in dclist: 
    f = open('data/'+ items + '.txt', 'r+') 
    for line in f: 
     if 'interface Vlan' in line: 
      interface = re.search(r'(?<=\interface Vlan).*', line).group(0) 

     if 'vrf member' in line.next(): 
      vrfmem = interface = re.search(r'(?<=\vrf member).*', line).group(0) 
     else: 
      vrfmem = "default" 

     if 'ip address' in line: 
      print(items + interface + vrfmem + "ip her") 
    db.commit() 
    db.close() 

は、私のドキュメント内のすべての行は、私はそれが特定の文字列に一致した場合、私は、変数を設定しているため、次の行を確認したいです。

私は自分自身に読めるものから、pythonには私のために仕事をすることができるということを支持している関数next()が組み込まれています。私ははAttributeError `を提示私のコードイムを実行するときしかし「strの」オブジェクトは、「次へ」

`

答えて

0

next()は、ファイルオブジェクト(あなたのケースではf)、文字列ではありません(上と呼ばれるべきである何の属性を持っていませんline)。

Pythonはfの現在の位置を知っているので、f.next()は自動的にlineの行を読み込みます。

ループがfor line in fループに影響することに注意してください。このループは、1行おきにスキップし、1行おきにf.next()を返します。上書きされたくない場合は、あなたがこのthread.

で見ることができる

1 
2 

3 
4 

5 
6 

1 
2 
3 
4 
5 
6 

このコード:

with open('test.txt') as file: 
    for line in file: 
     print line, file.next() 

戻り、このtest.txtファイルで

+0

を.next入れている場合、私はそれを教えてくれますか、それは次の行です(注、私の代わりに現在/次の前回/現在を使用しています)現在読んでいる行 – BIGFATTOBY

+0

@TobiasBrodersen:更新を見る –

0

前の行をヘルパー文字列で保持することができます。私はこのケースでのF varibleに()

dclist = [] 
interface = "" 
vrfmem = "" 

db = sqlite3.connect('data/main.db') 
cursor = db.cursor() 
cursor.execute('''SELECT r1 FROM routers''') 
all_rows = cursor.fetchall() 
for row in all_rows: 
    dclist.append(row[0]) 


for items in dclist: 
    f = open('data/'+ items + '.txt', 'r+') 
    currLine = f.readline() 
    while line != '': 
     prevLine = currLine 
     currLine = f.readline() 
     if 'interface Vlan' in prevLine : 
      interface = re.search(r'(?<=\interface Vlan).*', line).group(0) 

     if 'vrf member' in currLine: 
      vrfmem = interface = re.search(r'(?<=\vrf member).*', line).group(0) 
     else: 
      vrfmem = "default" 

     if 'ip address' in prevLine: 
      print(items + interface + vrfmem + "ip her") 
    db.commit() 
    db.close() 
関連する問題