Python:在嵌套的for循环中只执行1个循环
我有一个python脚本,带有嵌套的Python:在嵌套的for循环中只执行1个循环,python,Python,我有一个python脚本,带有嵌套的for循环 HostList = file('trylist.txt') DestHostList = file('trylist2.txt') for DestHost in DestHostList: DestHost = DestHost.strip() for HostName in HostList: HostName = HostName
for
循环
HostList = file('trylist.txt')
DestHostList = file('trylist2.txt')
for DestHost in DestHostList:
DestHost = DestHost.strip()
for HostName in HostList:
HostName = HostName.strip()
try:
if DestHost!=HostName:
print HostName,DestHost
print "one loop finishes"
except Exception, e:
ExceptionHost.write(HostName+' - '+DestHost+': '+str(e)+'\n')
print "exception"
#traceback.print_exc(file=sys.stdout)
外部for
循环似乎只执行一次。
潜在的问题是什么?外部循环执行多次,但只有在第一次迭代中它才有事情要做。在其他情况下,内部循环不会执行,给人的印象是它只运行了一次 问题是您打开了第一个文件,
trylist.txt
,并在外部循环的第一次迭代中完全读取它。在第二次迭代中,文件对象(类似于迭代器)已经被“消费”
尝试:
如果文件很大,并且希望避免将其存储在内存中,则每次都可以重新打开该文件:
DestHostList = file('trylist2.txt')
for DestHost in DestHostList:
DestHost = DestHost.strip()
HostList = file('trylist.txt')
for HostName in HostList:
另外,使用
with
语句在python中打开文件也是一种很好的做法。外部循环执行多次,但只有在第一次迭代中它才有事情要做。在其他情况下,内部循环不会执行,给人的印象是它只运行了一次
问题是您打开了第一个文件,trylist.txt
,并在外部循环的第一次迭代中完全读取它。在第二次迭代中,文件对象(类似于迭代器)已经被“消费”
尝试:
如果文件很大,并且希望避免将其存储在内存中,则每次都可以重新打开该文件:
DestHostList = file('trylist2.txt')
for DestHost in DestHostList:
DestHost = DestHost.strip()
HostList = file('trylist.txt')
for HostName in HostList:
另外,在python中使用
with
语句打开文件也是一种很好的做法。问题是,在第一次循环之后,内部循环中的第二个文件已经用完了
正如我所看到的,您正在尝试使用try。。。除了…
。但是由于文件读取操作在块之外,因此您错过了它
这里有一个解决方案,可以提前读取所有文件内容。我希望这将有助于:
host_list = file("trylist.txt").readlines()
dest_host_list = file("trylist2.txt").readlines()
for h in host_list:
for d in dest_host_list:
h,d = h.strip(),d.strip()
if h != d:
print h,d
问题是,在第一次传递之后,您已经耗尽了内部循环中的第二个文件 正如我所看到的,您正在尝试使用
try。。。除了…
。但是由于文件读取操作在块之外,因此您错过了它
这里有一个解决方案,可以提前读取所有文件内容。我希望这将有助于:
host_list = file("trylist.txt").readlines()
dest_host_list = file("trylist2.txt").readlines()
for h in host_list:
for d in dest_host_list:
h,d = h.strip(),d.strip()
if h != d:
print h,d
DestHostList
只有一个元素?多个元素,而不仅仅是一个元素如果外部循环只循环一次,则该列表只有一个元素。内部循环在HostList
上迭代。但是deshostlist有3个elementssory@DSM,我可能在最近的一次编辑中错过了一个缩进,我试图帮助…deshostlist
只有一个元素?很多元素,而不仅仅是一个元素如果外部循环只循环一次,那么该列表只有一个元素。内部循环在HostList
上迭代。但是DestHostList有3个elementssory@DSM,我可能在最近的一次编辑中错过了一个缩进,我试图帮助您…您希望使用open
打开文件,而不是使用file
。@Matthias我知道使用open
是推荐的方法,但我不明白OP为什么要担心这么小的细节,而他真正关心的是让他的简单脚本工作……让某些东西工作起来是好的。让某些东西按预期的方式工作会更好。你想用open
打开文件,而不是file
@Matthias打开文件,我知道使用open
是推荐的方法,但我不明白为什么OP会担心这样一个小细节,当他真正关心的是让他的简单脚本工作的时候…让一些东西工作是好的。使某物按预期的方式工作会更好。