Python:循环没有中断
Python: loop doesn't break
中断循环时遇到问题。当它到达结束词时,我想打破它。希望您能帮助我了解这段代码中缺少的内容。谢谢。
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
尝试使用 re module
.
例如:
import re
for line in s.split("\n"):
if re.match('end', line):
break
问题是内部 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
块处于同一级别,否则文件将在每次迭代时写入。
中断循环时遇到问题。当它到达结束词时,我想打破它。希望您能帮助我了解这段代码中缺少的内容。谢谢。
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
尝试使用 re module
.
例如:
import re
for line in s.split("\n"):
if re.match('end', line):
break
问题是内部 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
块处于同一级别,否则文件将在每次迭代时写入。