2011-12-13 6 views
4

h5py를 사용하여 데이터 (부동 소수점 숫자)를 그룹으로 저장합니다. 데이터 그 자체 외에도 hdf5 내에 추가 파일 (필요한 정보가 들어있는 .xml 파일)을 포함시켜야합니다. 어떻게해야합니까? 내 접근 방식이 잘못 되었나요?HDF5, h5py 안에 XML 파일

f = h5py.File('filename.h5') 
f.create_dataset('/data/1',numpy_array_1) 
f.create_dataset('/data/2',numpy_array_2) 
. 
. 

내 H5 나무는 이렇게 보일 것입니다 : 방금 HDF5 파일에 XML 파일을 첨부해야하는 경우

/ 
/data 
/data/1 (numpy_array_1) 
/data/2 (numpy_array_2) 
. 
. 
/morphology.xml (?) 
+0

에 대한 XML 파일 무엇입니까? 나중에 어떻게 정보를 사용합니까? –

답변

5

하나의 옵션은 가변 길이 문자열 데이터 집합으로 추가하는 것입니다.

http://code.google.com/p/h5py/wiki/HowTo#Variable-length_strings

예컨대 :

import h5py 
xmldata = """<xml> 
<something> 
    <else>Text</else> 
</something> 
</xml> 
""" 

# Write the xml file... 
f = h5py.File('test.hdf5', 'w') 
str_type = h5py.new_vlen(str) 
ds = f.create_dataset('something.xml', shape=(1,), dtype=str_type) 
ds[:] = xmldata 
f.close() 

# Read the xml file back... 
f = h5py.File('test.hdf5', 'r') 
print f['something.xml'][0] 
+0

감사합니다. 매력적이었습니다! :) – chaitu

3

, 당신은 HDF5 파일에 속성으로 추가 할 수 있습니다.

xmlfh = open('morphology.xml', 'rb') 
h5f.attrs['xml'] = xmlfh.read() 

당신은 다음과 같이 다음 XML 파일에 액세스 할 수 있습니다

h5f.attrs['xml'] 

공지 사항, 또한, 당신은 저장소가 64K보다 큰 속성 수 없다, 당신은 부착하기 전에 파일을 압축 할 수 있습니다. Python의 표준 라이브러리에서 라이브러리를 압축하는 방법을 살펴볼 수 있습니다.

그러나 XML 파일의 정보에 매우 쉽게 액세스 할 수는 없습니다. 각 데이터 세트의 메타 데이터를 XML 파일의 일부 메타 데이터에 연결하려면 lxml과 같은 XML 라이브러리를 사용하여 필요할 때 매핑 할 수 있습니다. 또한 XML 데이터의 각 필드를 별도의 특성으로 추가하여 XML 필드로 데이터 집합을 쿼리 할 수 ​​있습니다.이 모든 작업은 XML 파일의 내용에 따라 달라집니다. 나중에 데이터를 검색하는 방법에 대해 생각해보십시오.

각 xml 파일의 그룹을 데이터 세트와 함께 만들고 단일 hdf5 파일에 모두 넣을 수도 있습니다. 내가 관리하는 파일의 크기가 얼마나 큰지 YMMV.