2013-05-20 1 views
-1

아래 스크립트를 사용하여 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." 
+0

이 다른 질문의 중복이 아닌 경우 [파이썬 - HDF5에 데이터를 쓰는 문제] (http://stackoverflow.com/questions/16639813/python-problems- writing-data-to-hdf5)를 닫았다면, 어떻게 설명했는지 더 잘 설명해야했습니다. –

답변

1

당신은 h5py 살펴 보셔야합니다. 이 모듈은 HDF5 파일을 읽고 쓸 수있는 매우 쉬운 기능을 제공합니다. 이미지 또는 래스터와 같은 데이터 필드를 읽으면 numpy 배열로 직접 사용할 수 있습니다. 또한

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