2011-10-06 57 views
5

Tôi đang sử dụng phiên bản 64 bit của Enthought Python để xử lý dữ liệu trên nhiều tệp HDF5. Tôi đang sử dụng phiên bản h5py 1.3.1 (HDF5 1.8.4) trên Windows 64 bit.Python HDF5 H5Py gặp sự cố khi mở nhiều tệp

Tôi có một đối tượng cung cấp giao diện thuận tiện cho quyền thừa kế dữ liệu cụ thể của tôi, nhưng kiểm tra h5py.File (fname, 'r') độc lập mang lại kết quả tương tự. Tôi đang lặp qua danh sách dài (~ 100 tệp một lúc) và cố gắng lấy ra các phần thông tin cụ thể từ các tệp. Vấn đề tôi gặp phải là tôi nhận được cùng một thông tin trong một số tệp! Vòng lặp của tôi trông giống như sau:

files = glob(r'path\*.h5') 
out_csv = csv.writer(open('output_file.csv', 'rb')) 

for filename in files: 
    handle = hdf5.File(filename, 'r') 
    data = extract_data_from_handle(handle) 
    for row in data: 
    out_csv.writerow((filename,) +row) 

Khi tôi kiểm tra các tệp bằng cách sử dụng thứ gì đó như hdfview, tôi biết nội bộ là khác nhau. Tuy nhiên, csv tôi nhận được dường như chỉ ra rằng tất cả các tập tin có chứa cùng một dữ liệu. Có ai nhìn thấy hành vi này trước đây không? Bất kỳ đề xuất nào tôi có thể bắt đầu gỡ lỗi vấn đề này?

Trả lời

4

Tôi đã kết luận rằng đây là một biểu hiện lạ của Perplexing assignment behavior with h5py object as instance variable. Tôi đã viết lại mã của mình để mỗi tệp được xử lý trong một cuộc gọi hàm và biến đó không được sử dụng lại. Sử dụng cách tiếp cận này, tôi không thấy cùng một hành vi kỳ lạ và dường như nó hoạt động tốt hơn nhiều. Để rõ ràng, giải pháp trông giống như:

files = glob(r'path\*.h5') 
out_csv = csv.writer(open('output_file.csv', 'rb')) 

def extract_data_from_filename(filename): 
    return extract_data_from_handle(hdf5.File(filename, 'r')) 

for filename in files: 
    data = extract_data_from_filename(filename) 
    for row in data: 
    out_csv.writerow((filename,) +row) 
Các vấn đề liên quan