我正在尝试使用下面的脚本将数据写入HDF5文件。
我运行代码的终端窗口输出正确,输出HDF5文件已创建,但输出文件表中没有数据。
任何提示?
import tables
import datetime
import time
import csv
from tables import openFile, IsDescription, Float64Col, Int16Col
from scipy import array
import numpy as np
import os
#
output_filename='events_per_hour_output.h5'
#
if __name__ == '__main__':
# Read data from file
input_file='data_s20002_20121101_20121105.h5'
#Find station ID, start date and stop date from filename
print "input_file: ",str(input_file)
stationID=str(input_file[6:11])
print "stationID: ",stationID
start_year=str(input_file[12:16])
print "start_year: ", start_year
start_month=str(input_file[16:18])
print "start_month: ", start_month
start_day=str(input_file[18:20])
print "start_day",start_day
stop_year=str(input_file[21:25])
print "stop_year ",stop_year
stop_month=str(input_file[25:27])
print "stop_month ",stop_month
stop_day=str(input_file[27:29])
print "stop_day ",stop_day
print ''
with tables.openFile(str(input_file), 'r') as datafile:
data = [(x['timestamp'], x['nanoseconds'], x['ext_timestamp'], x['pulseheights']) for
x in datafile.root.s20002.events]
#
class variable_01(IsDescription):
unix_timestamp = Float64Col()
events = Float64Col()
GMT = Float64Col()
step = Float64Col()
#
#
start_date=datetime.datetime(int(start_year),int(start_month),int(start_day))
print "start_date: ",start_date
#start_date=time.gmtime(int(start_year),int(start_month),int(start_day))
stop_date=datetime.datetime(int(stop_year),int(stop_month),int(stop_day))
print "stop_date: ",stop_date
print"start_date.timetuple(): ",start_date.timetuple()
start_unix_time=time.mktime(start_date.timetuple())
#start_unix_time=time.gmtime(start_date.timetuple())
stop_unix_time=time.mktime(stop_date.timetuple())
step_length=3600# 3600 seconds = 1 hour
total_length=0
#
with openFile(output_filename, 'w') as data_splice:
group_variable_01 = data_splice.createGroup("/", 'hisparc_vantage')
table_variable_01 = data_splice.createTable(group_variable_01, 'table_01', variable_01)
dummy_01 = table_variable_01.row
#
for hour_step in range(int(start_unix_time),int(stop_unix_time),step_length):
dummy_01['step']=1
dummy_01.append
result = []
for row in data:
if (hour_step <= row[0]) and (row[0] < hour_step+step_length):#
result.append(row)
print "UTC start time: ",time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(hour_step))
print "len(result) : ", len(result)
#
#
dummy_01['unix_timestamp'] = hour_step
dummy_01['events']=len(result)
print "dummy_01['events']=",dummy_01['events']
print "dummy_01['unix_timestamp'] =", dummy_01['unix_timestamp']
dummy_01.append()
print ''
table_variable_01.flush
print "Done."
答案 0 :(得分:1)
你应该看看h5py。该模块提供了非常简单的读/写HDF5文件的功能。如果您读取图像或栅格等数据字段,则可以直接使用numpy数组。
答案 1 :(得分:0)
import h5py
# Create random data
import numpy as np
data_matrix = np.random.uniform(-1, 1, size=(10, 3))
# Write data to HDF5
data_file = h5py.File('file.hdf5', 'w')
data_file.create_dataset('group_name', data=data_matrix)
data_file.close()