python - 解码为字符串

标签 python string python-3.x datetime

在 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/

相关文章:

python - 多个数据框 - 使用 pandas 从宽到长

regex - Python读取带有开始和停止条件的文件

python - 从使用 BeautifulSoup 解析的 HTML 中删除标签

javascript - Object.defineProperty 还是 .prototype?

sql - 如何在oracle sql的WHERE IN子句中传递变量?

java - 判断字符串是否是 Pangram 的代码?

python - 无效的十六进制值

python - django:将无盐 md5(无盐)哈希转换为 pbkdf2

python - 如何按条件简化字典列表?

python - 扩展分层数据,根据列中的列表项创建新行