Обработка различных результатов из parsedatetime

Я пытаюсь изучить python, проведя последние 15 лет, работая только на Perl, и только изредка.

Я не могу понять, как обрабатывать два разных результата из метода parse из Calendar.parse () из parsedatetime

Учитывая этот скрипт:

#!/usr/bin/python import parsedatetime.parsedatetime as pdt import parsedatetime.parsedatetime_consts as pdc import sys import os # create an instance of Constants class so we can override some of the defaults c = pdc.Constants() # create an instance of the Calendar class and pass in our Constants # object instead of letting it create a default p = pdt.Calendar(c) while True: reply = raw_input('Enter text:') if reply == 'stop': break else: result = p.parse(reply) print result print 

И этот образец запуска:

Введите текст: завтра
(time.struct_time (tm_year = 2009, tm_mon = 11, tm_mday = 28, tm_hour = 9, tm_min = 0, tm_sec = 0, tm_wday = 5, tm_yday = 332, tm_isdst = -1), 1)

Введите текст: 11/28
((2009, 11, 28, 14, 42, 55, 4, 331, 0), 1)

Я не могу понять, как получить результат, чтобы я мог последовательно использовать результат:

 print result[0].tm_mon, result[0].tm_mday 

Это не будет работать в том случае, если вход «11/28», потому что вывод – это всего лишь кортеж, а не struct_time.

Наверное, простая вещь, но не для этого новичка. С моей точки зрения вывод Calendar.parse () непредсказуем и прост в использовании. Любая помощь оценивается. Тиа.

2 Solutions collect form web for “Обработка различных результатов из parsedatetime”

Я знаю, что это старый вопрос, но я столкнулся с этим вчера, и ответ здесь неполный (он потерпит неудачу в случае, когда parse () возвращает дату-время).

Из документов parsedatetime:

parse () возвращает кортеж (результат, тип), где type указывает один из следующих:

  0 = not parsed at all 1 = parsed as a date (of type struct_time) 2 = parsed as a time (of type struct_time) 3 = parsed as a datetime (of type datetime.datetime) 

Это немного странно и, возможно, не самый ясный способ сделать это, но он работает и очень полезен.

Вот небольшой фрагмент кода, который преобразует все, что он возвращает, в правильное время и время python:

 import parsedatetime.parsedatetime as pdt def datetimeFromString( s ): c = pdt.Calendar() result, what = c.parse( s ) dt = None # what was returned (see http://code-bear.com/code/parsedatetime/docs/) # 0 = failed to parse # 1 = date (with current time, as a struct_time) # 2 = time (with current date, as a struct_time) # 3 = datetime if what in (1,2): # result is struct_time dt = datetime.datetime( *result[:6] ) elif what == 3: # result is a datetime dt = result if dt is None: # Failed to parse raise ValueError, ("Don't understand date '"+s+"'") return dt 

Используйте x = time.struct_time(result[0]) и вы получите struct_time (чтобы вы могли проверить x.tm_mon и x.tm_mday ) независимо от того, является ли этот result[0] struct_time или просто 9 -tuple (я никогда не слышал о parsedatetime поэтому не знаю, почему это непоследовательно по возвращаемому типу, но с помощью этого простого подхода вы можете нейтрализовать эту несогласованность).

Python - лучший язык программирования в мире.