0

私はファイルから情報を収集して後で出力するプログラムを書いていますが、今の私の問題は与えられた情報をテストすることです。ユーザーが入力したコードがファイルの日付と同じであるかどうかをテストしたいと思います。使用されるファイルには、YYYY、MM、DDの形式の日付と売上が含まれています。forループを使用して、ファイルの各行をユーザー入力に対してテストしようとしていますが、datetime.dateが反復可能ではないというエラーが発生します。解決策/代替案はありますか?これがコードです、

from datetime import date

def DateTest(Date, Position):

    firstTry = True
    validSyntax = False
    if validSyntax == False:

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

        elif firstTry == False:
            Date = raw_input("Please input the desired %s date in the form YYYY,MM,DD: " % Position)
            try :
                Date = startDate.strip().split(',')
                Year = int(Date[0])
                Month = int(Date[1])
                Day = int(Date[2])
                Date = date(Year, Month, Day)
            except:
                print "That is invalid input."
            else:
                validSyntax = True
                print" ok got it"

        if validSyntax == True:
            for line in Date:
                line = line.strip().split(',')
                yearTest = int(line[0])
                monthTest = int(line[1])
                dayTest = int(line[2])
                dateTest = date(yearTest, monthTest, dayTest)
                if dateTest == Date:
                    "print debug"
startDate = raw_input("Please input the desired start date: ")
start = "start"
Response = DateTest(startDate, start)

ご覧のとおり、有効な入力をテストしてから、ファイルにある日付をテストします。これにより、日時が反復可能ではないことがわかります。

4

2 に答える 2

1

コードをクリーンアップする strptime を使用します。

>>> s = "1994,05,24"
>>> datetime_obj = datetime.datetime.strptime(s, "%Y,%m,%d")
>>> datetime_obj
datetime.datetime(1994, 5, 24, 0, 0)

.date() を呼び出すことができる日付のみが必要な場合は、datetime オブジェクトが提供されることに注意してください。

>>> date_obj = datetime_obj.date()

ファイルをループする場合は、ファイル オブジェクト、またはファイル オブジェクトに変換するファイル名が必要です。ファイル形式が csv の場合は csv モジュールが役立ちますが、ファイルが単なる日付のリストである場合は必要ないかもしれません。

于 2012-06-18T01:33:39.040 に答える
0

現在、for ループの直前に print ステートメントを配置すると、次のようになります。

if validSyntax == True:
        print Date
        for line in Date:
            ...

それは出力します:

1995-06-24

これはリストではないため、反復可能ではありません。

ここでリストから日付オブジェクトに変換しています:

Date = date(Year, Month, Day)

この行を削除すると、日付型ではなくリストとして残ります。

于 2012-06-18T00:30:03.660 に答える