Чтение H5File из папки внутри zip-папки в pandas dataframe - PullRequest
0 голосов
/ 27 сентября 2019

Вопрос: Чтение H5File из папки внутри zip-папки в pandas dataframe

Справочная информация: Структура каталогов у меня выглядит следующим образом: file.zip/2019/file.h5

file.zip - это zip-папка. 2019 - это папка внутри zip-папки.

. Я могу извлечь папку с помощью extractall и прочитать файл h5 из папки.Однако, чтобы прочитать его непосредственно из заархивированной папки в файл данных pandas.

Код для создания файла примера: Вот код для воссоздания образца файла h5, который я пытаюсь использовать в этом сценарии: Шаг 1:

   `import h5py
   file = h5py.File('sample.h5','w')
   dataset = file.create_dataset("dset",(4, 6), h5py.h5t.STD_I32BE)
   file.close()`

Шаг 2: После создания файла поместите его в папку «2019». Поместите «2019» в другую папку с именем zipfolder и заархивируйте его.теперь структура каталогов выглядит так: «file.zip/2019/file.h5"

Примечание. Это файл H5py и хранилище HDFS.Панды read_hdf не могут работать на H5Files.Прочитайте документацию по HDF5 для большей ясности в отношении файлов H5 и хранилища HDFS.Они оба имеют разную внутреннюю структуру, но имеют одинаковое расширение .h5. Для чтения файлов H5 используется пакет h5py.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Это выяснили с помощью группы Google H5py: https://groups.google.com/forum/m/#!forum/h5py

import zipfile import h5py import pandas as pd<br> print(h5py.__version__)# Make sure the version is 2.9 or above zf = zipfile.ZipFile('zipfolder.zip') print(zf.namelist())# get the name of the fileobject<br> fiz = zf.open('zipfolder/2019/sample.h5')<br> hf = h5py.File(fiz,'r')<br> print(list(hf.keys())) # To see the datasets inside h5 File<br> df = pd.DataFrame(hf['dset'][:]) df.head()

Использовал h5py для чтения h5Files.Pandas читает только форматы HDFStore, которые имеют структурированные форматы данных, и не читает h5-файлы на данный момент.

0 голосов
/ 27 сентября 2019
import os
import pandas as pd
import zipfile

with zipfile.ZipFile('file.zip') as z:
    for filename in z.namelist():
        if os.path.isdir(filename) and filename == "2019":
            # read the file into a pandas dataframe
            df = pd.read_hdf(z.open(os.path.join(filename, "file.h5"), 'rb'))

Надеюсь, это поможет вам!

...