如何在python中多次运行for循环?

时间:2012-06-18 12:30:49

标签: python loops for-loop

我正在尝试获取用户输入并交叉引用它以查看它是否在文件中。但是,它只运行一次for循环;如果我第一次使用它是正确的,如果我第一次弄错了那么它永远不会,因为for循环只运行一次。当它重新运行while循环时,它永远不会重新运行for循环。为什么python只允许你运行一次循环,我该如何解决这个问题呢?这是代码,

testDate = open("Sales.txt")


def DateTest(Position):


    validSyntax = False
    Complete = False
    DateIn = True
    while Complete == False:

            if DateIn == False:
                    print
                    print "That date is not in the file."
                    print
            Date = raw_input("Please input the desired %s date in the form YYYY,MM,DD: " % Position)

            try :
                Date = Date.strip().split(',')
                Year = int(Date[0])
                Month = int(Date[1])
                Day = int(Date[2])
                Date = (Year, Month, Day)
            except:
                print
                print "That is invalid input."
                print
            else:
                validSyntax = True

            if validSyntax == True:
                #It only runs this once, if I put a debug statement after the 'for' #then it never prints out, the loop never runs after the first time
                for line in testDate:
                    line = line.strip().split(',')
                    yearTest = int(line[0])
                    monthTest = int(line[1])
                    dayTest = int(line[2])
                    dateTest = (yearTest, monthTest, dayTest)
                    if Date == dateTest:
                        Complete = True
                        print 'success'

            DateIn = False
            validSyntax = False


Response = DateTest("start")

1 个答案:

答案 0 :(得分:3)

将文件视为可迭代文件会在读取时将读取指针移动到每行的末尾。到达文件末尾后,就无法再从中读取数据了。

您有2个选项。如果您愿意保持文件打开并重复读取,则可以在testDate.seek(0)循环之前执行for,这会将指针移回到开头。

或者,如果文件相对较小并且您想要避免持续的磁盘访问,则可以将整个文件读入脚本开头的行列表中,用以下内容替换顶部的open调用:{ {1}}