Разбор строк datetime с микросекундами
У меня есть текстовый файл с большим количеством строк datetime в 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, я обнаружил, что директива format %f
для микросекунд не существует в 2.5.
Ответы
Ответ 1
В качестве альтернативы:
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
для анализа строки даты/времени (так что не нужно придумывать угловые случаи для регулярного выражения).
Ответ 2
Используйте модуль 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
Ответ 3
Кто-то уже подал ошибку с этой проблемой: Issue 1982. Поскольку вам нужно это для работы с python 2.5, вы должны разобрать значение вручную, а затем манипулировать объектом datetime.
Ответ 4
Это может быть не лучшее решение, но вы можете использовать регулярное выражение:
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])