在Python3中,我收到以下错误消息:
ValueError: time data '\u200e07-30-200702:38 PM' does not match format '%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
答案 0 :(得分:1)
您的输入中包含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)