Обработка (перебор) нескольких файлов (HDF5) и нескольких узлов в каждом файле HDF

Как я могу автоматически обрабатывать восходящие имена файлов и имена массивов в Numpy:

У меня есть серия файлов HDF5 с именем:

20120101.hdf5, 20120102.hdf5, 20120103.hdf5, ..., 20120130.hdf5, 20120131.hdf5  

каждый файл hdf5 содержит несколько имен массивов:

array1, array2, array3, ..., array24

Я хочу изменить каждый из массивов отдельно, а затем создать соответствующие новые файлы hdf5. Например, используя 20120101.hdf5:

import numpy
import tables

file = openFile("20120101.hdf5","r")
b1 = file.root.array1
c1 = (b1<=1)
new20120101_array1 = creatArray('/','1',c1)
c2 = ((b1<=2) and (b>1))
new20120101_array1 = creatArray('/','2',c2)
.
.
.

c20 = ((b1<=20) and (b>19))
new20120101_array1 = creatArray('/','20',c20)

и повторите это для массивов 2-24. В результате хочу иметь:

new20120101.hdf5 ---- new20120101_array1 ---- 1
                                              2
                                              ...
                                              20
                 ---- new20120101_array2 ---- 1
                                              ...
                                              20
                 ...
                 ---- new20120101_array24 --- 1
                                              ...
                                              20
new20120102.hdf5
....
new20120131.hdf5

person l.z.lz    schedule 09.05.2012    source источник
comment
В чем именно вопрос?   -  person user545424    schedule 10.05.2012
comment
Как это сделать автоматически? Вместо того, чтобы менять имена вручную?   -  person l.z.lz    schedule 10.05.2012
comment
Ваш код написан неправильно: Если вы делаете import tables, то вам придется писать все функции из этого модуля как tables.function. Если вы напишете file = openFile(...) и new = creatArray(...), это не сработает! Чтобы использовать код так, как вы его написали, вы должны вызвать модуль как from tables import openFile, creatArray или from tables import *.   -  person carla    schedule 10.05.2012


Ответы (1)


Если у вас есть несколько файлов в каталоге, вы можете использовать функцию os.listdir, которая возвращает список, содержащий имена записей в каталоге.

Пример:

import os
import tables

direc = '/Users/cg/' # the working directory (where your files are stored)
dirs = os.listdir(direc)

for idir in dirs: # this will iterate over the files in your working directory

    if idir.endswith('.he5'): # only for HDF5 files...
        hdf5 = tables.openFile(os.path.join(direc,idir))

        #### DO WHAT YOU WANT WITH EACH FILE!

        hdf5.close()

На другую часть вашего вопроса уже дан ответ в вашем другом вопросе, наверное (вы можете использовать функцию walkNodes).

person carla    schedule 10.05.2012
comment
В этом примере я использую библиотеку PyTables для работы с файлами HDF5. Есть и другие библиотеки, которые вы можете использовать. - person carla; 10.05.2012
comment
и я дам вам совет... Если вы хотите знать, что именно делает функция и что она возвращает, введите help(function). Например, чтобы узнать, что делает os.path.join, вы должны написать help(os.path.join), и вы получите: Соедините два или более компонентов пути, вставляя \ при необходимости. Если какой-либо компонент является абсолютным путем, все предыдущие компоненты пути будут отброшены. - person carla; 10.05.2012
comment
Большое спасибо за все ваши ответы и советы! - person l.z.lz; 11.05.2012