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

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

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

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

问题是您打开了第一个文件,
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会担心这样一个小细节,当他真正关心的是让他的简单脚本工作的时候…让一些东西工作是好的。使某物按预期的方式工作会更好。