len()of datetime.datetime对象

时间:2014-04-11 23:01:39

标签: python datetime string-length

我试图在python中获取各种类型数据的长度:

 if type(rowoutClipFC[fieldnum]) in (int, float, datetime.datetime):
       lenrowoutClipFC = len(str(rowoutClipFC[fieldnum]))
 else:
       lenrowoutClipFC = len(rowoutClipFC[fieldnum])

到目前为止我遇到的类型是int(),float(),str(),str()和ascii字符,datetime.datetime。

我需要将int(),float(),datetime.datetime对象转换为str(),这样我才能获得长度,而我不需要使用带有ascii的str()和str()。由于某种原因,datetime.datetime没有通过第一个if语句的气味测试,因此它出错。我不确定为什么它不是......

错误返回:

lenrowoutClipFC = len(rowoutClipFC[fieldnum])
TypeError: object of type 'datetime.datetime' has no len()

所以,它正在转向其他声明,这不是我所期待的......

修改

我期待的是:

for row in arcpy.SearchCursor("Strategic_Land_Resource_Planning_Area"):
    type(row.APPROVAL_DATE)

这会返回datetime.datetime

我从中提取数据的表格中的字段是' date'领域。所以,我猜它会返回一个datetime.datetime类型......即使有人提到没有datetime.datetime类型这样的东西吗?

所以,我进一步测试:

import datetime
for row in arcpy.SearchCursor("Strategic_Land_Resource_Planning_Area"):
    if type(row.APPROVAL_DATE) == datetime.datetime:
         print 'Yes"

这会返回Yes

所以,我不确定为什么我在顶部的剧本不满足if条件....

我尝试使用isinstance进行相同的结果。它在if语句中并不满足。

3 个答案:

答案 0 :(得分:3)

这是因为datetime.datetime的类型不是'datetime',而是'type'。那是因为datetime.datetime是类,而不是类的实例。

E.g。

>>> import datetime

>>> type(datetime.datetime)
<type 'type'>

>>> type(datetime.datetime.now())
<type 'datetime.datetime'>

>>> type(int)
<type 'type'>
>>>

如果您正在测试某种类型,文档建议使用isinstance()而不是type()(ref https://docs.python.org/2/library/functions.html#type

请改为尝试:

field = rowoutClipFC[fieldnum]
if type(field) in (int, float) or isinstance(field, datetime.datetime):
    lenrowoutClipFC = len(str(field))
else:
    lenrowoutClipFC = len(field)

更简单,你可以这样做:

field = rowoutClipFC[fieldnum]
lenrowoutClipFC = len(str(field))

答案 1 :(得分:1)

解释一下

  

我需要将int(),float(),datetime.datetime对象转换为   str()所以我可以得到长度,而我不需要这样做   str()和str()与ascii。

在Python中有许多内置序列类型,包括字符串,unicode字符串,列表,元组等。您可以将任何这些类型传递给len(),并返回一个整数,因为有一个C Python中的protocol至少要求这些对象支持这种行为。

>>> len("hello")
5
>>> len(["foo", "bar"]
2

许多其他对象也可以传递给len(),包括dictionaries等内置类型和实现__len__()魔术方法的自定义对象。

>>> len({"foo":"bar"}
1

但是,某些不是序列/容器的对象不支持此功能,例如您提到的integerfloat类型。如果您尝试将此类对象传递给len(),则会引发TypeError异常。

>>> len(5)
TypeError: object of type 'int' has no len()

对于你发现的datetime个对象也是如此

>>> from datetime import datetime
>>> len(datetime.today())
TypeError: object of type 'datetime.datetime' has no len()

这是有道理的 - len()应指明对象中的项目数。您希望datetime对象返回什么?

因此,您可以将datetime对象转换为字符串并计算它的字符,但这并不能真正告诉您。

>>> datetime.datetime.today()
'2014-04-12 00:36:03.829979'
>>> len(str(datetime.today()))
26

最终你不应该试图在len()对象上调用datetime - 所以你应该重新思考你试图通过这个代码实现的目标。

答案 2 :(得分:0)

你可以试试这个:

import datetime
for row in arcpy.SearchCursor("Strategic_Land_Resource_Planning_Area"):
    if isinstance(row.APPROVAL_DATE), datetime.datetime):
         print "Yes"
    else:
         print "No"

是否打印&#34;是&#34;?