0

ユーザー入力を取得して相互参照し、ファイル内にあるかどうかを確認しようとしています。ただし、forループは1回だけ実行されます。最初に正しく機能した場合、最初に間違った場合、forループは1回しか実行されないため、正しく機能しません。whileループを再実行すると、forループが再実行されることはありません。Pythonでループを1回しか実行できないのはなぜですか?これを修正するにはどうすればよいですか?これがコードです、

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")
4

1 に答える 1

3

ファイルを iterable として扱うと、読み取りポインターが各行の末尾に移動します。ファイルの最後に到達すると、それ以上読み取るデータはありません。

2 つのオプションがあります。ファイルを開いたままにして繰り返し読むことに満足している場合はtestDate.seek(0)、ループの前に行うことができforます。これにより、ポインターが最初に戻ります。

または、ファイルが比較的小さく、一定のディスク アクセスを避けたい場合は、ファイル全体をスクリプトの先頭にある行のリストに読み込み、先頭の open 呼び出しを次のように置き換えることができます。testDate = open("Sales.txt").readlines()

于 2012-06-18T12:35:02.897 に答える