我试图在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语句中并不满足。
答案 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
但是,某些不是序列/容器的对象不支持此功能,例如您提到的integer
和float
类型。如果您尝试将此类对象传递给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;?