Разбор строк времени и даты с микросекундами - PullRequest
14 голосов
/ 10 февраля 2009

У меня есть текстовый файл с большим количеством строк даты и времени в формате isoformat. Строки похожи на это:

'2009-02-10 16: 06: 52.598800'

Эти строки были сгенерированы с использованием str(datetime_object). Проблема в том, что по какой-то причине str(datetime_object) генерирует другой формат, когда для объекта datetime микросекунды установлены в ноль, а некоторые строки выглядят так:

'2009-02-10 16: 06: 52'

Как я могу разобрать эти строки и преобразовать их в объект datetime ?

Очень важно получить все данные в объекте, включая микросекунды.

Мне нужно использовать Python 2.5 , я обнаружил, что директива формата %f для микросекунд не существует в 2.5.

Ответы [ 4 ]

21 голосов
/ 10 февраля 2009

В качестве альтернативы:

from datetime import datetime

def str2datetime(s):
    parts = s.split('.')
    dt = datetime.strptime(parts[0], "%Y-%m-%d %H:%M:%S")
    return dt.replace(microsecond=int(parts[1]))

Использование strptime для анализа строки даты / времени (поэтому не нужно придумывать угловые случаи для регулярного выражения).

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

Используйте модуль dateutil. Он поддерживает гораздо более широкий диапазон форматов даты и времени, чем встроенные в Python.

Вам потребуется easy_install dateutil , чтобы следующий код работал:

from dateutil.parser import parser

p = parser()
datetime_with_microseconds = p.parse('2009-02-10 16:06:52.598800')
print datetime_with_microseconds.microsecond

Результат:

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

Кто-то уже подал ошибку с этой проблемой: Выпуск 1982 . Поскольку это необходимо для работы с python 2.5, необходимо вручную проанализировать значение и затем манипулировать объектом datetime.

2 голосов
/ 10 февраля 2009

Возможно, это не лучшее решение, но вы можете использовать регулярное выражение:

m = re.match(r'(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})(?:\.(\d{6}))?', datestr)
dt = datetime.datetime(*[int(x) for x in m.groups() if x])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...