Python:在嵌套的for循环中只执行了1个循环

2024-09-24 06:25:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python脚本,有一个嵌套的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循环似乎只执行一次。 潜在的问题是什么?在


Tags: intxt脚本forifhostnamefilestrip
2条回答

外部循环执行多次,但只有在第一次迭代中才有事情要做。在其他情况下,内部循环不执行,给您留下的印象是它只运行一次。在

问题是打开第一个文件trylist.txt,并在外循环的第一次迭代中完全读取它。在第二次迭代中,file对象(类似迭代器)已经被“消费”。在

尝试:

HostList = file('trylist.txt').readlines()  # now it's a list of lines, not an iterator
DestHostList = file('trylist2.txt')
for DestHost in DestHostList:
    DestHost = DestHost.strip()
    for HostName in HostList:

如果文件很大,并且您希望避免将其存储在内存中,则可以每次重新打开它:

^{pr2}$

另外,在python中使用with语句打开文件是一个很好的做法。在

问题是,在第一次传递之后,您已经耗尽了内部循环中的第二个文件。在

如我所见,您试图用try ... except ...来解决问题。但是由于文件读取操作在块之外,所以您错过了它。在

这里有一个提前读取所有文件内容的解决方案。我希望它能帮助:

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

相关问题 更多 >