2015-04-25 14 views
7

Trong phòng thí nghiệm của chúng tôi, chúng tôi lưu trữ dữ liệu của chúng tôi trong hdf5 tệp trough gói python h5py.Đóng tệp dữ liệu h5py mở

Khi bắt đầu thử nghiệm, chúng tôi tạo một tệp hdf5 và lưu trữ mảng sau mảng mảng dữ liệu trong tệp (trong số các thứ khác). Khi thử nghiệm không thành công hoặc bị gián đoạn, tệp không được đóng đúng cách. Do thử nghiệm của chúng tôi chạy từ iPython, tham chiếu đến đối tượng dữ liệu vẫn còn (ở đâu đó) trong bộ nhớ.

Có cách nào để quét tất cả các đối tượng dữ liệu h5py đang mở và đóng chúng không?

Trả lời

10

Đây là cách nó có thể được thực hiện (Tôi không thể tìm ra cách để kiểm tra đóng Ness của tập tin mà không ngoại lệ, có thể bạn sẽ tìm thấy):

import gc 
for obj in gc.get_objects(): # Browse through ALL objects 
    if isinstance(obj, h5py.File): # Just HDF5 files 
     try: 
      obj.close() 
     except: 
      pass # Was already closed 

Một ý tưởng:

Dpending cách bạn sử dụng tệp, điều gì về cách sử dụng trình quản lý ngữ cảnh và từ khóa with như thế này?

with h5py.File("some_path.h5") as f: 
    f["data1"] = some_data 

Khi dòng chảy chương trình thoát với khối, các tập tin đã bị đóng bất kể điều gì xảy ra, trong đó có trường hợp ngoại lệ, vv

+0

Cảm ơn thông tin trên "Một ý tưởng". Tôi chỉ tìm kiếm để đảm bảo rằng h5py.Files của tôi đã kết thúc bằng "with" – zerocog

Các vấn đề liên quan