阅读文本文档中的下一行

时间:2017-02-09 12:26:32

标签: python python-3.5

您好我正在尝试为学校项目制作实时信息屏幕, 我正在阅读一个文件,这个文件根据它正在读取的行而做了很多不同的事情。

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'对象没有属性'next'

`

2 个答案:

答案 0 :(得分:0)

应该在文件对象(在您的情况下为f)上调用

next(),而不是字符串(line)。

Python知道f的当前位置,因此f.next()会自动读取line之后的行。

请注意,这会影响for line in f循环:此循环将跳过每个其他行,即f.next()返回的行。

使用此test.txt文件:

1
2
3
4
5
6

此代码:

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

返回:

1
2

3
4

5
6

如果这不是所需的行为,您可以查看此thread.

答案 1 :(得分: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+')
    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()
相关问题