【问题标题】:Python code for filtering against order dates is not behaving properly用于过滤订单日期的 Python 代码行为不正确
【发布时间】:2016-03-12 10:25:10
【问题描述】:

我编写了一个 while 循环来过滤订单数据库,以便仅将用户选择的两个日期之间的订单附加到 orderDates 数组和要在地图上绘制的订单数组。我已使用以下代码将用户选择的日期(通过 HTML 表单提交)转换为 python 日期时间对象:

filters.append(datetime.datetime.strptime(str(request.forms.get('startDate')), "%Y-%m-%d"))
filters.append(datetime.datetime.strptime(str(request.forms.get('endDate')), "%Y-%m-%d"))

如您所见,这两个日期随后被添加到一个称为过滤器的数组中。当我检查每个订单时,我的问题就出现了,出于某种原因,即使我选择了一个应该返回多个订单的日期范围,所有订单都被过滤掉了。这是我写的while循环:

while(x < len(orders)):
    # Checks that postcode is valid
    if(re.search('^(GIR ?0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]([0-9ABEHMNPRV-Y])?)|[0-9][A-HJKPS-UW]) ?[0-9][ABD-HJLNP-UW-Z]{2})$',orders[x][15].strip())):
        # Converts the order date into a time object
        orderDate = datetime.datetime.strptime(orders[x][2], "%d/%m/%y")
        print(orderDate)
        # Compares the order date with the start date and end date of the timeframe to ensure it lies between them
        if(orderDate > filters[0]) and (orderDate < filters[1]):
            # If the order was made during the timeframe requested and it fits the order category requested then it is added to mapOrders
            if(filters[4] == "All"):
                mapOrders.append(orders[x])
                orderDates.append(orderDate)
                print("Order added")
            elif(orders[x][21].strip() == filters[4]):
                mapOrders.append(orders[x])
                orderDates.append(orderDate)
                print("Order added")
            else:
                print("Order filtered out")
        else:
            print("Order filtered out")
            print(filters[0])
            print(filters[1])
    else:
        print(orders[x][15])
        print("Order filtered out,regex.")

    x = x + 1

以下是程序通过此 while 循环运行时产生的一些控制台输出,用户选择的两个日期分别是 2015 年 5 月 1 日作为开始日期和 2015 年 7 月 1 日作为结束日期:

2015-05-14 00:00:00
Order filtered out
2015-05-14 00:00:00
Order filtered out
2015-05-16 00:00:00
Order filtered out
2015-05-16 00:00:00
Order filtered out
2015-05-16 00:00:00
Order filtered out
2015-05-12 00:00:00
Order filtered out
2015-05-12 00:00:00
Order filtered out
2015-05-07 00:00:00
Order filtered out
2015-05-07 00:00:00
Order filtered out
2015-05-07 00:00:00
Order filtered out
2015-05-08 00:00:00
Order filtered out
2015-05-09 00:00:00
Order filtered out
2015-05-04 00:00:00
Order filtered out
2015-05-04 00:00:00
Order filtered out
2015-05-05 00:00:00
Order filtered out
2015-05-05 00:00:00
Order filtered out
2015-05-05 00:00:00
Order filtered out
2015-05-01 00:00:00
Order filtered out
2015-05-01 00:00:00
2015-07-01 00:00:00
2015-05-01 00:00:00
Order filtered out
2015-05-01 00:00:00
2015-07-01 00:00:00
2015-05-01 00:00:00
Order filtered out
2015-05-01 00:00:00
2015-07-01 00:00:00
2015-05-03 00:00:00
Order filtered out
2015-05-01 00:00:00
Order filtered out
2015-05-01 00:00:00
2015-07-01 00:00:00

有什么想法吗?

【问题讨论】:

  • 从你的输出中我可以告诉你filters[0] 实际上是2015-05-01 00:00:00(5 月 1 日),而不是 6 月 1 日
  • 啊,是的,这就是我的意思,但它仍然无法解释出了什么问题。

标签: python datetime if-statement filter


【解决方案1】:

解决了这个问题,过滤器[4] 中有一个不应该存在的空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    相关资源
    最近更新 更多