我是pytables的新手,我在尝试将日期类型值添加到使用pytables创建的表时遇到错误。这就是我正在做的事情:
from tables import *
import csv
import datetime
class Test(IsDescription):
trDate = Time32Col()
str = 'C:testTable.h5'
fileh = open_file(str, mode='w')
group = fileh.createGroup("/",'pricing','daily pricing and vol')
table = fileh.create_table(group,'nodeName',Test,'Pricing and volume')
r = table.row
下一行:
r['trDate'] = datetime.datetime.strptime('1/1/12', "%m/%d/%y")
返回错误:
#TypeError: invalid type (<class 'datetime.datetime'>) for column ``trDate``
#> c:\users\me\desktop\untitled0.py(16)<module>()
和这一行:
r['trDate'] = '1/1/12'
会产生同样的错误:
#TypeError: invalid type (<class 'str'>) for column ``trDate``
#> c:\users\me\desktop\untitled0.py(21)<module>()
如果我能做到这一点,我的最后一行将是:
r.append()
有什么建议吗?我没有找到任何使用pytables的工作示例,其中使用了'date'类型的列。提前谢谢......
答案 0 :(得分:3)
正如类型名Time32Col
所暗示的那样,它需要一个32位整数。具体来说,它将是自1970年1月1日纪元以来的秒数。您可以使用time
模块获得此数据,例如: int(time.mktime(time.strptime("1/1/2012", "%m/%d/%y")))
答案 1 :(得分:2)
http://www.pytables.org/usersguide/datatypes.html告诉你
“有两种类型的时间:4字节有符号整数(time32)和8字节双精度浮点(time64)。它们都反映了自Unix纪元以来的秒数,即1月1日00:00 :00 UTC 1970.它们分别作为NumPy的int32和float64存储在内存中,并使用H5T_TIME类存储在HDF5文件中。整数时间存储在磁盘上,而浮点时间则分成两个有符号整数值,表示秒和微秒(注意:小的小数将会丢失!)。“
因此,您似乎必须将datetime对象转换为timedelta对象,然后将其转换为秒。只有这样才能通过pytables存储。
d = datetime.datetime.strptime('1/1/12', "%m/%d/%y")
i = d - datetime.datetime.strptime('1/1/70', "%m/%d/%y")
toStore = i.total_seconds()
r['trDate'] = toStore
r.append()