Python:在嵌套for循环中只有1个循环

时间:2013-04-22 03:31:30

标签: 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循环似乎只执行一次。 可能是什么潜在的问题?

2 个答案:

答案 0 :(得分:3)

外部循环执行多次,但只有在第一次迭代中它才能执行。在其余部分中,内部循环不会执行,只留下它只运行一次的印象。

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

尝试:

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:

如果文件太大而你想避免将其存储在内存中,你可以每次都重新打开它:

DestHostList = file('trylist2.txt')
for DestHost in DestHostList:
    DestHost = DestHost.strip()
    HostList = file('trylist.txt')
    for HostName in HostList:

此外,最好使用with语句在python中打开文件。

答案 1 :(得分:0)

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

我可以看到您尝试使用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