Ваш словарь содержит строки с байтами UTF-8 . Python 2 всегда будет использовать \xhh
при представлении таких байтов в отладочном выходе, в том числе при показе содержимого словаря (для которого используется выход функции repr()
).
Python делает это, чтобы сделать ваш отладочный вывод подходящим для воссоздания первоначального значения просто путем копирования и вставки в любой сеанс интерпретатора Python или нового сценария, не беспокоясь о конфигурации терминала или редактора, не поддерживая ASCII.
Вы видите то же самое, когда эхо строк в интерактивном сеансе:
>>> text = 'डिनर के बाद चहलकदमी को पारिवारिक परंपरा बनाएं'
>>> print text
डिनर के बाद चहलकदमी को पारिवारिक परंपरा बनाएं
>>> text
'\xe0\xa4\xa1\xe0\xa4\xbf\xe0\xa4\xa8\xe0\xa4\xb0 \xe0\xa4\x95\xe0\xa5\x87 \xe0\xa4\xac\xe0\xa4\xbe\xe0\xa4\xa6 \xe0\xa4\x9a\xe0\xa4\xb9\xe0\xa4\xb2\xe0\xa4\x95\xe0\xa4\xa6\xe0\xa4\xae\xe0\xa5\x80 \xe0\xa4\x95\xe0\xa5\x8b \xe0\xa4\xaa\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xbf\xe0\xa4\xb5\xe0\xa4\xbe\xe0\xa4\xb0\xe0\xa4\xbf\xe0\xa4\x95 \xe0\xa4\xaa\xe0\xa4\xb0\xe0\xa4\x82\xe0\xa4\xaa\xe0\xa4\xb0\xe0\xa4\xbe \xe0\xa4\xac\xe0\xa4\xa8\xe0\xa4\xbe\xe0\xa4\x8f\xe0\xa4\x82'
Если вы должны напечатать исходные байты непосредственно на своем терминале, не печатайте словарь. Вам нужно будет сделать свое собственное форматирование, чтобы избежать выдачи repr()
.
>>> datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
'2011-11-03 18:21:26'
Мы можем попробовать что-то вроде ниже
import datetime
date_generated = datetime.datetime.now()
date_generated.replace(microsecond=0).isoformat(' ').partition('+')[0]
.isoformat(' ', 'seconds')
, предложенному в более раннем ответе.
– davidchambers
1 February 2018 в 13:50
Еще один вариант:
>>> import time
>>> time.strftime("%Y-%m-%d %H:%M:%S")
'2011-11-03 11:31:28'
По умолчанию это использует локальное время, если вам нужен UTC, вы можете использовать следующее:
>>> time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())
'2011-11-03 18:32:20'
Поскольку не все экземпляры datetime.datetime
имеют микросекундный компонент (т. е. когда он равен нулю), вы можете разбить строку на «.». и возьмите только первый элемент, который всегда будет работать:
unicode(datetime.datetime.now()).partition('.')[0]
В Python 3.6:
>>> datetime.now().isoformat(' ', 'seconds')
'2017-01-11 14:41:33'
https://docs.python.org/3.6/library/datetime.html#datetime.datetime.isoformat
>>> import datetime
>>> now = datetime.datetime.now()
>>> print unicode(now.replace(microsecond=0))
2011-11-03 11:19:07
.isoformat([sep])
- возвращает строку, представляющую дату и время в формате ISO 8601, YYYY-MM-DDTHH: MM: SS .mmmmmm или, если микросекунда равна 0, ГГГГ-MM-DDTHH: MM: SS "
– Bengt
1 December 2013 в 03:30
from datetime import datetime now = datetime.now (). strftime ("% Y-% m-% d_% H:% M:% S.% f")
blockquote>
%f
в строке формата. Это делает этот ответ неправильным.
– Steven Rumbalski
23 January 2015 в 16:00
Так я это делаю. Формат ISO:
import datetime
datetime.datetime.now().replace(microsecond=0).isoformat()
# Returns: '2017-01-23T14:58:07'
Вы можете заменить «T», если вы не хотите формат ISO:
datetime.datetime.now().replace(microsecond=0).isoformat(' ')
# Returns: '2017-01-23 15:05:27'
.isoformat()
по сравнению с unicode()
?
– davidchambers
24 January 2017 в 01:25
unicode()
, и если вы хотите ISO-8601, используйте isoformat()
– radtek
24 January 2017 в 15:57
unicode()
удобнее, чем .isoformat().replace('T', ' ')
, конечно. ;)
– davidchambers
24 January 2017 в 17:49
isoformat
принимает спецификатор разделителя, поэтому замена не должна выполняться. просто сделайте: datetime.datetime.now().replace(microsecond=0).isoformat(' ')
– coya
25 July 2017 в 18:18
Сохраните первые 19 символов, которые вы хотели бы нарезать:
>>> str(datetime.datetime.now())[:19]
'2011-11-03 14:37:50'
+05:30
. Правильно будет str(now())[:19]
.
– K3---rnc
19 February 2016 в 16:18