未转换的数据仍然存在:Python 中的 .387000

Posted

技术标签:

【中文标题】未转换的数据仍然存在:Python 中的 .387000【英文标题】:unconverted data remains: .387000 in Python 【发布时间】:2015-05-26 19:04:29 【问题描述】:

我有一个日期时间,它是我从文本文件中读取的字符串。我想减少额外的毫秒数,但我想先将其转换为日期时间变量。这是因为它可能采用不同的格式,具体取决于文本文件中的内容。但是,我尝试过的一切都希望我已经知道格式。请看看我在这里尝试什么:

import time, datetime

mytime = "2015-02-16 10:36:41.387000"
myTime = time.strptime(mytime, "%Y-%m-%d %H:%M:%S.%f")

myFormat = "%Y-%m-%d %H:%M:%S"

print datetime.datetime.fromtimestamp(time.mktime(time.strptime(mytime, myFormat)))

但这给了我这个错误:

File "python", line 10, in <module>
ValueError: unconverted data remains: .387000`

谁能告诉我如何做一个正常的日期时间格式?在其他语言中,我可以传递各种格式,然后毫无问题地将其设置为新格式​​。

【问题讨论】:

【参考方案1】:

你正在倒退。试试这个:

from datetime import datetime

mytime = "2015-02-16 10:36:41.387000"
myTime = datetime.strptime(mytime, "%Y-%m-%d %H:%M:%S.%f")

myFormat = "%Y-%m-%d %H:%M:%S"

print "Original", myTime
print "New", myTime.strftime(myFormat)

结果:

Original 2015-02-16 10:36:41.387000
New 2015-02-16 10:36:41

【讨论】:

【参考方案2】:

您忘记在myFormat 中引用微秒

myFormat = "%Y-%m-%d %H:%M:%S.%f"

无论如何,你可以用更少的步骤转换它

from datetime import datetime

mytime = "2015-02-16 10:36:41.387000"
full = "%Y-%m-%d %H:%M:%S.%f"
myTime = datetime.strptime(mytime, full)
>>> datetime.datetime(2015, 2, 16, 10, 36, 41, 387000)

这里mytimedatetime 对象中。如果你想打印没有微秒,使用strftime

myfmt = "%Y-%m-%d %H:%M:%S"
print datetime.strptime(mytime, full).strftime(myfmt)
>>> 2015-02-16 10:36:41

【讨论】:

这实际上创建了一个字符串而不是一个日期时间对象,这是 OP 的代码试图做的【参考方案3】:

另一种解决方案是使用 split():

# mytime is str(timestamp)
datetime.datetime.strptime(mytime.split('.')[0], '%Y-%m-%d %H:%M:%S')

【讨论】:

【参考方案4】:

如果没有其他任何变化,即格式,除了你在最后删除微秒,你真的不需要调用 strftime.您可以将其子串化:

mytime = "2015-02-16 10:36:41.387000"
mytime = mytime[:-7]    
print mytime

结果:

2015-02-16 10:36:41

免责声明:这仅适用于您不重新格式化或重新排列任何内容,并且仅当您尝试删除最后一位时。

【讨论】:

它对我来说太粗糙了(11M 行数据),但这是忽略数据的唯一答案

以上是关于未转换的数据仍然存在:Python 中的 .387000的主要内容,如果未能解决你的问题,请参考以下文章

leetcode python 387. 字符串中的第一个唯一字符 383. 赎金信

git repo 中的文件都被删除和未跟踪,但它们仍然存在。这怎么可能?

尽管存在索引,但未定义的索引仍然存在

LeetCode:328. 奇偶链表387. 字符串中的第一个唯一字符(python3)

前端与算法 leetcode 387. 字符串中的第一个唯一字符

题目地址(387. 字符串中的第一个唯一字符)