2011-10-06 4 views
5

여러 개의 HDF5 파일에서 데이터를 처리하기 위해 64 비트 버전의 Enthought Python을 사용하고 있습니다. 나는 64 비트 Windows에서 h5py 버전 1.3.1 (HDF5 1.8.4)을 사용하고 있습니다.파이썬 HDF5 H5Py가 여러 파일을 열 때 발생합니다

필자는 특정 데이터 계층에 편리한 인터페이스를 제공하는 객체를 가지고 있지만 h5py.File (fname, 'r')을 테스트하면 독립적으로 동일한 결과가 산출됩니다. 필자는 긴 목록 (한 번에 ~ 100 개 파일)을 반복하고 파일에서 특정 정보를 추출하려고 시도하고 있습니다. 내가 가지고있는 문제는 여러 파일에서 동일한 정보를 얻고 있다는 것입니다! 내 루프는 다음과 같습니다.

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) 

hdfview와 같은 파일을 검사 할 때 내부가 다릅니다. 그러나, 내가 얻은 CSV는 모든 파일에 동일한 데이터가 들어 있음을 나타냅니다. 전에이 행동을 본 사람이 있습니까? 이 문제를 디버깅하기 위해 내가 갈 수있는 모든 제안 사항이 있습니까?

답변

4

나는 이것이 이상한 징후 인 Perplexing assignment behavior with h5py object as instance variable이라고 결론을 내 렸습니다. 각 파일을 함수 호출 내에서 처리하고 변수를 다시 사용하지 않도록 코드를 다시 작성했습니다. 이 방법을 사용하면 같은 이상한 동작을 보지 못하고 훨씬 더 효과적입니다. 명확성을 위해 솔루션은 다음과 같이 보입니다.

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)