Лучший способ разобрать строки времени - PullRequest
3 голосов
/ 10 февраля 2012

Мне было интересно, есть ли более краткий и быстрый способ анализа метки времени, которая может иметь 3 формата из нескольких местоположений / файлов журнала. Ниже приведен код, который я сейчас использую, но это очень уродливая и ужасно медленная версия. Есть ли более быстрый и быстрый способ сделать это?

FORMATS = ["%Y-%m-%d %H:%M:%S"      ,
           "%Y%m%d_%H.%M.%S"        ,
           "%a %b %d %H:%M:%S %Y"]


def _hacktime(self, t):
    # CAUTION: 
    # The nastiest time hack of all TIME
    #
    try:
        t = time.mktime(time.strptime(t, self.FORMATS[0]))
    except:
        try:
            t = time.mktime(time.strptime(t, self.FORMATS[1]))
        except:
            try:
                t = time.mktime(time.strptime(' '.join([t, 
                                                time.strftime('%Y')]),
                                                self.FORMATS[2]))
            except Exception as e:
                print('could not convert time %s: %s' % (t, e))
                t = time.time()   
    return [t, time.ctime(t)]

Ответы [ 3 ]

5 голосов
/ 10 февраля 2012

Используйте цикл

the_time= None
for f in FORMATS:
    try:
        the_time = time.mktime(time.strptime(t, f))
        return the_time # or break 
    except ValueError: 
        continue
if the_time is None:
    raise ValueError( "{0!r} is not a valid time".format(t) )
1 голос
/ 10 февраля 2012

Ну, вы могли бы сделать регулярное выражение для сопоставления обоих первых двух, вытягивая поля компонента.

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

Если он совпадает, вы можете также заполнить struct_time напрямую, так как у вас есть все соответствующие поля.

0 голосов
/ 10 февраля 2012

Вы можете проверить количество строк "-", ":" и "" перед тем, как пытаться преобразовать их с помощью strptime. Вместо того, чтобы пытаться перехватывать исключения и одновременно делать отступы для каждой попытки, используйте цикл и выходите из цикла (или просто возвращайте), как только преобразование выполнится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...