2012-02-29 19 views
22

La función para obtener una fecha y hora de una cadena, datetime.strptime(date_string, format) requiere un formato de cadena como segundo argumento. ¿Hay alguna forma de construir un datetime a partir de una cadena sin sin saber el formato exacto, y teniendo Python mejor adivinarlo?datetime from cadena en Python, formato de cadena mejor adivinación

+1

posible duplicado de [¿Hay alguna biblioteca de Python para analizar las fechas y horas de un lenguaje natural?] (Http://stackoverflow.com/questions/1495487/is-there-any-python-library-for -parsing-dates-and-times-from-a-natural-language) –

+4

Diferenciar entre mm/dd/aaaa vs. dd/mm/aaaa es un problema interesante, con resultados desastrosos si lo haces mal. –

+0

Depende de lo inexacto que sea cuando diga "sin el formato exacto". ¿Podría dar ejemplos de los tipos de entradas que desea ser capaz de manejar? O bien, ¿podría tener información parcial sobre el formato (por ejemplo, si el año tiene 2 o 4 dígitos o si el mes precede al día o viceversa)? Sin al menos alguna información básica, incluso una persona no puede hacer lo que pide. ¿Es 01/02/12 1 de febrero de 2012, 2 de enero de 2012, 12 de febrero de 2001, 2 de diciembre de 2001, o alguna otra cosa? –

Respuesta

4

Antes de que yo fuera un tipo pitón, era un tipo perl. Una de las cosas que siempre me he perdido, pero no he visto nada parecido es Date::Manip. Ese módulo puede extraer una buena marca de tiempo de un puñado de mordiscos. Casi sospecho que su autor llegó a un acuerdo con el Diablo.

me he encontrado a través de un par de cosas que se llevan a puñaladas en ella en Python:

Si sin embargo, encontraré algo mejor, me encantaría saber de eso.

+0

Gracias por las recomendaciones. Consulte mi respuesta, Creo que encontré mi propia respuesta con la biblioteca [dateutil] (http://pypi.python.org/pypi/python-dateutil/1.5). – Yarin

8

Puede salirse con la suya con una simple función si solo se compara con las fechas.

def get_date(s_date): 
    date_patterns = ["%d-%m-%Y", "%Y-%m-%d"] 

    for pattern in date_patterns: 
     try: 
      return datetime.datetime.strptime(s_date, pattern).date() 
     except: 
      pass 

    print "Date is not in expected format: %s" %(s_date) 
    sys.exit(0) 
+0

Mucho más rápido que usar dateutil, siempre que su formato de fecha esté cubierto. – rbennell

Cuestiones relacionadas