2015-04-21 1 views
-4

Я хотел бы иметь возможность вводить только диапазон дат, а не каждую дату, так как я бы хотел, чтобы некоторые временные ряды работали над этими данными. Вот мой код до сих пор:Как ввести диапазон дат и превратить их в список?

import re 

def date(): 
    dates = [] 
    user_input ='' 
    pattern = re.compile('\d{2}.\d{2}.\d{2}') 
    while user_input != 'end': 
     user_input =raw_input("Please put folder with format yy.mm.dd or 'end': ") 
     if pattern.match(user_input): 
      dates.append(user_input) 
     elif user_input == 'end': 
      print 'Dates:' 
     else: 
      print "Use yy.mm.dd format or write 'end'" 
    return dates 
+1

Пожалуйста, сообщите нам, что в данный момент не так с кодом. – BlackVegetable

+2

не рекомендуется использовать re, просто попробуйте конвертировать в объекты datetime с помощью try/except, если вы хотите использовать даты. 44.44.44 также будет соответствовать вашему регулярному выражению –

+0

в коде, который просто отсутствует 'import re' и функция вызова' date() '.... down vote –

ответ

2

Я предложил бы использовать DateTime, если вы хотите работать с датами, так как это ваше регулярное выражение будет соответствовать любой комбинации dd.dd.dd:

from datetime import datetime 
def date(): 
    dates = [] 
    user_input ='' 
    while user_input != 'end': 
     user_input = raw_input("Please put folder with format yy.mm.dd or 'end': ") 
     try: 
      dte = datetime.strptime(user_input,"%y.%m.%d") 
      dates.append(dte) 
     except ValueError: 
      print "Use yy.mm.dd format or write 'end'" 
    print 'Dates:' 
    return dates 

Если вы хотите диапазон дат между началом и концом:

from datetime import datetime, timedelta 
def date(): 
    dates = [] 
    while True: 
     start = raw_input("Please put start date with format yy.mm.dd or 'end': ") 
     if start == "end": 
      break 
     end = raw_input("Please put end date with format yy.mm.dd or 'end': ") 
     try: 
      start = datetime.strptime(start,"%y.%m.%d") 
      end = datetime.strptime(end,"%y.%m.%d") 
      for _ in xrange((end-start).days+1): 
       dates.append(start) 
       start += timedelta(days=1) 
     except ValueError: 
      print "Use yy.mm.dd format or write 'end'" 
    print 'Dates:' 
    return dates 

pandas также могут быть полезны:

from datetime import datetime 
import pandas as pd 
def date(): 
    dates = [] 
    while True: 
     start = raw_input("Please put start date with format yy.mm.dd or 'end': ") 
     if start == "end": 
      break 
     end = raw_input("Please put end date with format yy.mm.dd or 'end': ") 
     try: 
      start = datetime.strptime(start,"%y.%m.%d") 
      end = datetime.strptime(end,"%y.%m.%d") 
      dates.append(pd.date_range(start, end)) 
     except ValueError: 
      print "Use yy.mm.dd format or write 'end'" 
    print 'Dates:' 
    return dates 
+0

, что, безусловно, лучший способ ввода дат, что я хотел бы сделать, это ввести '15 .04.15-15.04.20 'и иметь массив ['15 .04.15', '15.04.16' .. .15.04.20 ']. – bpr

+0

@bpr, затем получить дату начала и окончания и увеличить с помощью timedelta. Я отредактировал ответ –

+0

спасибо за помощь, очень благодарен! – bpr

Смежные вопросы