将数据写入HDF5文件

时间:2013-05-20 14:01:11

标签: python hdf5

我正在尝试使用下面的脚本将数据写入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."

2 个答案:

答案 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()

另请参阅:How to read HDF5 files in Python