您好我正在尝试为学校项目制作实时信息屏幕, 我正在阅读一个文件,这个文件根据它正在读取的行而做了很多不同的事情。
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'
`
答案 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()