0

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

2 回答 2

1

你应该看看h5py。该模块提供了非常简单的功能来读取/写入 HDF5 文件。如果您读取图像或栅格等数据字段,则将直接作为 numpy 数组使用。

于 2013-05-20T14:04:35.040 回答
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()

另请参阅:如何在 Python 中读取 HDF5 文件

于 2017-01-11T09:11:26.257 回答