在 Python3 中,我收到以下错误消息:
ValueError:时间数据“\u200e07-30-200702:38 PM”与格式“%m-%d-%Y%I:%M %p”不匹配
from datetime import datetime
dateRegistered = '\u200e07-30-200702:38 PM'
# dateRegistered = '07-30-200702:38 PM'
dateRegistered = datetime.strptime(dateRegistered, '%m-%d-%Y%I:%M %p')
print (dateRegistered)
上面的代码用于复制该问题。如果我取消注释该行,它就会起作用。我收到的字符串似乎已编码,但我无法找出它正在使用哪种编码。或者我有一个non-printable character在我的字符串中?
print ('\u200e07-30-200702:38 PM')
>>>> 07-30-200702:38 PM
最佳答案
您有一个U+200E LEFT-TO-RIGHT MARK您输入的字符。这是non-printing typesetting directive ,指示显示文本的任何内容切换到从左到右模式。当打印到已经设置为从左到右显示的控制台(例如西方世界的绝大多数终端)时,该字符串与没有标记的打印看起来没有任何不同。
由于它不是日期的一部分,您可以删除这些字符:
datetime.strptime(dateRegistered.strip('\u200e'), '%m-%d-%Y%I:%M %p')
或者如果它始终存在,请将其显式添加到您正在解析的格式中,就像 -
和 :
和 空格字符已经是您格式的一部分:
datetime.strptime(dateRegistered, '\u200e%m-%d-%Y%I:%M %p')
演示:
>>> from datetime import datetime
>>> dateRegistered = '\u200e07-30-200702:38 PM'
>>> datetime.strptime(dateRegistered.strip('\u200e'), '%m-%d-%Y%I:%M %p')
datetime.datetime(2007, 7, 30, 14, 38)
>>> datetime.strptime(dateRegistered, '\u200e%m-%d-%Y%I:%M %p')
datetime.datetime(2007, 7, 30, 14, 38)
关于python - 解码为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51813129/