Обработка данных с одинаковым именем из нескольких каталогов с использованием Python - PullRequest
0 голосов
/ 23 февраля 2019

Я ищу способ заставить мой скрипт Python обрабатывать данные с тем же именем, но расположенные в нескольких каталогах.В частности, я хочу сделать изображения из данных на разных временных шагах.У меня есть код, который анализирует данные и создает одно изображение за раз, но я бы предпочел, чтобы он просматривал все каталоги и делал все это для меня, а не делал это вручную.

Формат каталогов / файлов следующий:

Основной каталог:

  • имя файла: 2Dvizualization.py

Dir1: td.0000000

  • имя файла: sqm-wf-k001-st0001.dx
  • имя файла: sqm-wf-k001-st0001_gs.dx

Dir2: td.0000400

  • имя файла: sqm-wf-k001-st0001.dx
  • имя файла: sqm-wf-k001-st0001_gs.dx

Dir3: td.0000800

  • имя файла: sqm-wf-k001-st0001.dx
  • имя файла: sqm-wf-k001-st0001_gs.dx

.,.

Dir_final: td.016400

  • имя файла: sqm-wf-k001-st0001.dx
  • имя файла: sqm-wf-k001-st0001_gs.dx

и сценарий, который я написал для этого вручную:

import numpy as np

import matplotlib.pyplot as plt

//size of the grid for each spatial dimension

sizex = 267

sizey = 267

sizez = 201

//below the data is parsed and made into an array

sqm_data_gs = np.genfromtxt('sqm-wf-k001-st0001_gs.dx',skip_header = 7,skip_footer = 5)

sqm_data = np.genfromtxt('sqm-wf-k001-st0001.dx',skip_header = 7,skip_footer = 5)

sqm_dat_gs = np.array(sqm_data_gs) 

sqm_dat = np.array(sqm_data)

sqm_data_array = np.reshape(sqm_dat,(sizex,sizey,sizez))

sqm_data_array_gs = np.reshape(sqm_dat_gs,(sizex,sizey,sizez))

sqm_diff = sqm_data_array - sqm_data_array_gs


plt.imshow(sqm_diff[:,:,sqm_diff.shape[2]//2],interpolation = 'quadric',origin = 'lower',extent=[-20,20,-20,20])

plt.xlim([-3,3])

plt.ylim([-3,3])

//plt.show()

plt.savefig('sqm0001.png')

Я хотел бы сохранить каждое из изображений в некоторый файл с именем sqm ****. Png.

Есть ли способ перебрать все эти каталоги и вывести изображения как таковые?

Любое понимание будет с благодарностью.

Спасибо!

1 Ответ

0 голосов
/ 25 февраля 2019

Вам нужно пройти через дерево каталогов и найти файлы, которые вы хотите обработать.

В вашем случае я бы обернул ваш фактический код в функцию, а затем определил другую функцию, чтобы найти файлы и передать ихк вашей функции обработки.

Вы можете легко пройтись по своим каталогам, используя os.walk , так что это будет примером вашей проблемы:

import os

def find_data_files():
     for root, dirs, files in os.walk('/path/to/your/main/dir'): 
          if len(files) > 0:
              # we are inside a dir with files           
              for file in files:
                  # get file name and extension
                  name, ext = os.path.splitext(file)
                  if ext == '.dx':
                      if name[-3:] == '_gs':
                          # get full path for sql_data_gs file
                          sqm_data_gs = os.path.join(root, file)
                      else:
                          # get full path for sql_data file
                          sqm_data = os.path.join(root, file)
                      # now call your data processing function using file values
                      # (supposing you called your function `process_files)
                      process_files(sqm_data, sqm_data_gs) 
...