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)

如您所见,我测试有效输入,然后测试文件中的日期,这告诉我 datetime 不可迭代。

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)

请注意,它为您提供了一个 datetime 对象,如果您只想要可以调用 .date() 的日期。

>>> 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 回答