首先,我不是python开发人员。我试图修复从命令行执行的python脚本中的问题。这个脚本是由不在身边,不再愿意帮助解决问题的人编写的。
这是python 2.5,目前无法升级。以下是有问题的代码行:
start_time = datetime.strptime(str(paf.Start),"%Y-%m-%d %H:%M:%S")
dict_start = datetime(*start_time[:6])
end_time = datetime.strptime(str(paf.End),"%Y-%m-%d %H:%M:%S")
dict_end = datetime(*end_time[:6])
运行此代码时,它会生成描述错误:'datetime.datetime'对象是unsubscriptable。
这是导入声明:
from datetime import datetime
我觉得这很简单,但不是我的母语,谷歌没有产生任何有价值的结果,我被困住了。我尝试了几种不同的导入方法,产生了不同的错误,但都是这些语句。对此的任何帮助将不胜感激。
答案 0 :(得分:2)
看起来你只是想要时间吗? datetime.strptime方法返回一个'datetime'对象,因此以下属性包含time:datetime.day,datetime.hour,datetime.year等。
答案 1 :(得分:1)
这不是导入错误。它是Python不喜欢的* start_time [:6] * end_time [:6]。替换它
答案 2 :(得分:1)
dict_start = datetime(*start_time[:6])
与
dict_start = start_time
和
dict_end = datetime(*end_time[:6])
带
dict_end = end_time
看起来很傻,但无论如何也许会尝试一下。我的理由是:datetime.strptime
返回datetime.datetime
个对象。由于代码原来是
dict_start = datetime(*start_time[:6])
似乎dict_start
也是datetime.datetime
,具有相同的6个字段(年,月,日,小时,分钟,秒)。所以试试
dict_start = start_time
如果这不起作用,您可能需要向我们展示更多代码,以便我们可以更好地猜测目标是什么。
编辑:获取各个字段(年,月,日,小时,分钟,秒)的最简单方法是使用点表示法来访问属性。例如,
(start_time.year,start_time.month,start_time.day)
给出一个3元组,其中年,月和日为整数。
PS。有关datetime对象的更多信息,请参阅http://docs.python.org/library/datetime.html。它可能包含有用的示例。
答案 3 :(得分:1)
看起来datetime.strptime
调用实际上是要调用time.strptime
(在模块开头有一个单独的import time
) - 后一个调用确实会返回可订阅的,类似于元组的对象和成语
xx = time.strptime(...)
yy = datetime.datetime(x[:6])
(当然,在模块的开头有import time
和import datetime
)确实是在datetime.datetime
之前将字符串解析为datetime.datetime
实例的规范方法type添加了自己的strptime
函数,它基本上只完成了这项工作。因此,它看起来像“不完全迁移”的代码。
仅从datetime.date
实例datetime.datetime
中提取日期(作为x
对象,仅包含年,月,日 - 无小时,分钟,秒和分数),调用x.date()
将返回所需的日期对象(当然不是修改x
本身:datetime对象是不可变的 - 你总是创建新的,不改变现有的。)
答案 4 :(得分:1)
观察:
编写代码的人没有对其进行测试;它永远无法正常运行。
无论是谁编写它都会使datetime.datetime.strptime与time.strptime混淆。
曾几何时(双关语)datetime.datetime.strptime不存在。一个人必须做以下事情:
>>> from datetime import datetime
>>> import time
>>> time_tuple = time.strptime("2010-03-19 13:22:45","%Y-%m-%d %H:%M:%S")
>>> time_tuple
(2010, 3, 19, 13, 22, 45, 4, 78, -1)
>>> datetime(*time_tuple[:6])
datetime.datetime(2010, 3, 19, 13, 22, 45)
([:6]
是一个死的赠品)
现在可以这样做:
>>> from datetime import datetime
>>> datetime.strptime("2010-03-19 13:22:45","%Y-%m-%d %H:%M:%S")
datetime.datetime(2010, 3, 19, 13, 22, 45)
答案 5 :(得分:0)
以下代码对我没有意义:
start_time = datetime.strptime(str(paf.Start),"%Y-%m-%d %H:%M:%S")
dict_start = datetime(*start_time[:6])
如果你需要在dict_start中使用元组映射,那么使用类似这样的东西:
start_time = datetime.strptime(str(paf.Start),"%Y-%m-%d %H:%M:%S")
dict_start = start_time.timetuple()[:6]
如果你需要字典,那么:
start_time = datetime.strptime(str(paf.Start),"%Y-%m-%d %H:%M:%S")
dict_start = dict(zip(('year', 'month' ,'day', 'hour', 'minute', 'second'), start_time.timetuple()[:6]))
- 或者如果可能的话,使用paf.Start。另外,我不确定但是它可能是('year','month','day','hour','minute','second')元组在Python的某处预定义std lib或者它可以很容易地被其他一些构造替换,但是现在是午夜,我没有看到任何其他明显的解决方案。