有问题的打破循环。我想在它到达词尾的时候打破它。希望你能帮我,我在这段代码中遗漏了什么。谢谢。
def y():
with open('test.conf', 'r') as rf:
x = list()
for line in rf:
if 'config system global' in line:
x.append('config system global\n')
while True:
x.append(rf.__next__())
if 'end\n' in line:
break
with open('test.txt', 'w') as wf:
wf.writelines(x)
config system global
set admin-maintainer disable
set admin-scp enable
set admin-server-cert "Fortinet_Firmware"
set admintimeout 15
set anti-replay disable
set fgd-alert-subscription advisory latest-threat
set gui-dynamic-routing enable
set gui-multiple-utm-profiles enable
set gui-replacement-message-groups enable
set gui-sslvpn-personal-bookmarks enable
set gui-sslvpn-realms enable
set gui-wireless-opensecurity enable
set hostname "XXXXXX"
set internal-switch-mode interface
set revision-backup-on-logout enable
set revision-image-auto-backup enable
set strong-crypto enable
set tcp-timewait-timer 120
set timezone 80
set vdom-admin enable
end
config system accprofile
edit "prof_admin"
set admingrp read-write
set authgrp read-write
set endpoint-control-grp read-write
set fwgrp read-write
set loggrp read-write
set mntgrp read-write
set netgrp read-write
set routegrp read-write
set sysgrp read-write
set updategrp read-write
set utmgrp read-write
set vpngrp read-write
set wanoptgrp read-write
set wifi read-write发布于 2018-04-17 12:20:44
问题是内部while循环:
while True:
x.append(rf.__next__())
if 'end\n' in line:
break它是一个无限循环,因为line在循环中不会改变。它可能以StopIteration异常结束,除非它被捕获
适当的守则是:
while True:
line = rf.__next__()
if 'end\n' in line:
break
x.append(line)根据是否要将end保存在块中,在测试之前或之后追加end。
和缩进:
with open('test.txt', 'w') as wf:
wf.writelines(x)在与另一个with块相同的级别上,否则文件将在每次迭代时编写。
发布于 2018-04-17 11:36:47
尝试使用re module。
Ex:
import re
for line in s.split("\n"):
if re.match('end', line):
breakhttps://stackoverflow.com/questions/49876947
复制相似问题