Создание интервалов дат в Python - PullRequest
2 голосов
/ 03 августа 2009

Я хочу использовать цикл for для печати каждой даты между 2 датами. На самом деле собираемся объединить это с запросом MySQL, чтобы передать дату в сам запрос и в имя файла вывода.

Итак, как я могу изменить это:

sum = 0
for i in range(1,11):
 print sum
 sum += i

К этому?

InputDate = '2009-01-01'
for i in range('2009-01-01','2009-07-01'):
 print InputDate 
 InputDate += i

Я понимаю, что в правиле есть нечто, выполняющее эту функцию:

a = date(2009, 1, 1)
b = date(2009, 7, 1)
for dt in rrule(DAILY, dtstart=a, until=b):
 print dt.strftime("%Y-%m-%d")

Но я ограничен более старой версией python.

Это версия сценария оболочки того, что я пытаюсь сделать, если это поможет уточнить:

while [InputDate <= EndDate]
do
    sql="SELECT Date,SUM(CostUsd) FROM DailyStats WHERE Date = '$InputDate' GROUP BY Date"
    name=$(mysql -h -sN -u -p -e "$sql" > DateLoop-$InputDate.txt db)
    echo "$name"
    InputDate=$(( InputDate + 1 ))
done

Так, как я могу сделать это в Python?

Добавление дополнительного вопроса здесь для удобства чтения. К сожалению, я не могу использовать стандартную библиотеку MySQL, так как у нас есть проприетарная установка с множеством экземпляров, работающих параллельно. Единственный способ выполнить запрос этого типа - подключаться к одному экземпляру за раз в командной строке.

в то время как день <= b: распечатать «Бегущий экстракт за:» день </p>

sql = "SELECT Date, SUM (CostUsd) FROM STATTS d WHERE d.Date =" + day + "GROUP BY Date"

os.system ('mysql -h -sN -u -p -e "+ sql +"> DateLoop- "+ day +" .txt db')

день + = один_день

Ответы [ 3 ]

7 голосов
/ 03 августа 2009

Это будет работать:

import datetime

a = datetime.date(2009, 1, 1)
b = datetime.date(2009, 7, 1)
one_day = datetime.timedelta(1)

day = a

while day <= b:
    # do important stuff
    day += one_day
2 голосов
/ 03 августа 2009
In [1]: from dateutil.relativedelta import *

In [2]: from datetime import *

In [3]: aday = datetime.today()

In [4]: nextweek = aday+relativedelta(weeks=1)

In [5]: while aday<nextweek:
   ...:     print datetime.strftime(aday,format='%Y-%b-%d')
   ...:     aday+=relativedelta(days=1)
   ...:     
   ...:     
    #Output
2009-Aug-03
2009-Aug-04
2009-Aug-05
2009-Aug-06
2009-Aug-07
2009-Aug-08
2009-Aug-09

Хотя вы можете это сделать, большинство вещей о datetime, использующих stdlib, (IMO) dateutil позволяет вам делать это быстрее и лучше.

2 голосов
/ 03 августа 2009

Попробуйте это:

import datetime
dt1 = datetime.date(2009, 1, 1)
dt2 = datetime.date(2009, 7, 1)
dt = dt1
while dt <= dt2:
    print dt.strftime("%Y-%m-%d")
    dt += datetime.timedelta(days=1)

Вы говорите, что ограничены более старой версией Python. Если у вас нет модуля datetime (Python <2.3), то вы также можете сделать: </p>

import time
dt1 = time.mktime(time.strptime('2009-01-01', '%Y-%m-%d'))
dt2 = time.mktime(time.strptime('2009-07-01', '%Y-%m-%d'))
ONE_DAY = 86400
dt = dt1
while dt <= dt2:
    print time.strftime('%Y-%m-%d', time.gmtime(dt))
    dt += ONE_DAY
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...