2015-06-24 3 views
3

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

datetime.strptime('20130629110924095','%Y%m%d%H%M%S%f') 

производит следующий вывод

datetime.datetime(2013, 6, 29, 11, 9, 24, 95000) 

вместо

datetime.datetime(2013, 6, 29, 11, 9, 24, 95) 

быть ясно: 95 миллисекунды

Что я делаю неправильно?

+0

Я попытался заполняются нулями, но это не помогает datetime.strptime ('+20130629110924,095000', '% Y% м% d% H% M% S.% F') – tokyoCoder

+2

'% f' разбирает микросекунды. 95000 микросекунд равно 95 миллисекундам. Поэтому 'strptime' уже правильно разбирает вашу строку. – unutbu

+0

Прошу прощения. Ошибка произошла, когда я редактировал файл в MS Excel. Он удалил все конечные нули из исходного файла! Не видел этого! – tokyoCoder

ответ

1

Микросекунды состоят из шести цифр. 95 миллисекунд = 95000 микросекунд. Так, чтобы получить даты и времени с 95 миллисекунд, как datetime.datetime(2013, 6, 29, 11, 9, 24, 95000) пишут:

datetime.strptime('20130629110924095000','%Y%m%d%H%M%S%f') 
+0

Благодарим за ответ, но первый код также выводит дату и время. (2013, 6, 29, 11, 9, 24, 9500) Ответ, который я ожидаю, - это datetime.datetime (2013, 6, 29, 11, 9, 24, 95) Я исправлю вопрос о втором фрагменте – tokyoCoder

+0

Я обновил свой ответ после вашего обновления. – Delimitry

+0

Я вижу. Но datetime.strptime ('20130629110924000095', '% Y% m% d% H% M% S% f') дает мне 95 микросекунд вместо 95 миллисекунд. – tokyoCoder

1

documentation говорит:

% е является расширение набора символов формата в стандарте C (но реализован отдельно в DateTime объекты, и поэтому всегда доступны). При использовании с методом strptime() директива% f принимает от одной до шести цифр и нулевые прокладки справа.

Таким образом, вы получите ожидаемое поведение, ваш «095» дополнен «095000».

+0

Спасибо! Итак, что мне следует вводить, чтобы получить в качестве выходного сигнала 95 миллисекунд? Данные считываются из файла, в котором это написано в формате «20130629 1109240 095» «20130629 1109240 195» и т. Д. – tokyoCoder

0

95000 находится в микросекундах, что эквивалентно 95 миллисекундам, то есть вход ('095') уже является правильным, если вы хотите получить 95 миллисекунд.

Вот тот же вход с некоторым дополнительным форматированием для читаемости:

>>> from datetime import datetime 
>>> datetime.strptime('2013-06-29 11:09:24.095','%Y-%m-%d %H:%M:%S.%f') 
datetime.datetime(2013, 6, 29, 11, 9, 24, 95000) 

миллисекундного составляет 0.001 секунды и поэтому 95 миллисекунд 0.095 секунд, а потому 095 правильный вход для %f, который разбирает дробную часть Второй.