2014-10-28 14 views
7

Tôi đã tạo tệp HDF5 rõ ràng mà không gặp bất kỳ sự cố nào, theo Ubuntu 12.04 (phiên bản 32 bit), sử dụng Anaconda như phân phối Python và viết trong sổ ghi chép ipython. Các dữ liệu cơ bản là tất cả các mảng numpy. Ví dụ,Tệp HDF5 được tạo bằng h5py không thể mở bằng h5py

import numpy as np 
import h5py 

f = h5py.File('myfile.hdf5','w') 

group = f.create_group('a_group') 

group.create_dataset(name='matrix', data=np.zeros((10, 10)), chunks=True, compression='gzip') 

Nếu tôi cố gắng mở tập tin này từ một máy tính xách tay iypthon mới, tuy nhiên, tôi nhận được một thông báo lỗi:

f = h5py.File('myfile.hdf5', "r") 

--------------------------------------------------------------------------- 
IOError         Traceback (most recent call last) 
<ipython-input-4-b64ac5089cd4> in <module>() 
----> 1 f = h5py.File(file_name, "r") 

/home/sarah/anaconda/lib/python2.7/site-packages/h5py/_hl/files.pyc in __init__(self, name, mode, driver, libver, userblock_size, **kwds) 
    220 
    221    fapl = make_fapl(driver, libver, **kwds) 
--> 222    fid = make_fid(name, mode, userblock_size, fapl) 
    223 
    224   Group.__init__(self, fid) 

/home/sarah/anaconda/lib/python2.7/site-packages/h5py/_hl/files.pyc in make_fid(name, mode, userblock_size, fapl, fcpl) 
    77 
    78  if mode == 'r': 
---> 79   fid = h5f.open(name, h5f.ACC_RDONLY, fapl=fapl) 
    80  elif mode == 'r+': 
    81   fid = h5f.open(name, h5f.ACC_RDWR, fapl=fapl) 

/home/sarah/anaconda/lib/python2.7/site-packages/h5py/h5f.so in h5py.h5f.open (h5py/h5f.c:1741)() 

IOError: Unable to open file (Unable to find a valid file signature) 

Bạn có thể cho tôi biết những gì mà chữ ký tập tin thiếu là? Tôi đã bỏ lỡ điều gì đó khi tạo tệp?

+3

Bạn có 'f.close() '* ghi file * trước khi thử để mở lại? Ngoài ra, mã ví dụ của bạn không thực thi được: các biến 'Mfrgroup',' fgroup_ID', 'pos',' Msgroup' 'sgroup_ID' và' tên' không được xác định. – farenorth

+1

Nó thường được khuyến khích khi ghi vào hoặc từ các tệp (sử dụng bất kỳ hàm tạo tệp nào, không chỉ h5py) để sử dụng câu lệnh ['with'] (http://stackoverflow.com/questions/3012488/what-is-the-python -with-statement-designed-for). Ví dụ 'với h5py.File ('myfile.hdf5', 'w') là f:'. Điều này làm cho nó để bạn không phải đóng một cách rõ ràng các tập tin. Mặt khác, nó làm cho nó khó khăn để gỡ lỗi I/O tập tin tương tác. – farenorth

+1

Ngoài ra, bạn có thực sự cần tạo tất cả các biến đó trong tập dữ liệu của mình để tạo lỗi này không? Bạn có gặp lỗi tương tự nếu bạn chỉ tạo một trong các biến đó không? – farenorth

Trả lời

15

Vì chúng tôi đã giải quyết vấn đề trong các nhận xét về câu hỏi của mình, tôi đang viết kết quả ở đây để đánh dấu nó là đã được giải quyết.

Vấn đề chính là tôi quên đóng tệp sau khi tạo tệp. Sẽ Đã có hai tùy chọn đơn giản, một trong hai:

import numpy as np 
import h5py 

f = h5py.File('myfile.hdf5','w') 
group = f.create_group('a_group') 
group.create_dataset(name='matrix', data=np.zeros((10, 10)), chunks=True, compression='gzip') 
f.close() 

hay, yêu thích của tôi bởi vì tập tin được đóng tự động:

import numpy as np 
import h5py 

with h5py.File('myfile.hdf5','w') as f: 
    group = f.create_group('a_group') 
    group.create_dataset(name='matrix', data=np.zeros((10, 10)), chunks=True, compression='gzip') 
Các vấn đề liên quan