Перебирать файлы по нескольким каталогам для извлечения данных - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть ряд файлов, которые вложены, как показано на прикрепленном изображении. Для каждой «внутренней» папки (например, например, 001717528) я хочу извлечь строку данных из каждого файла FITS и создать файл CSV, содержащий все строки, и назвать этот файл CSV после имени «внутреннего» msgstr "папка (например, 001717528.csv, в которой есть данные из 18 файлов для подбора). Часть для извлечения данных проста, но у меня проблемы с кодированием итерации.

Я действительно не знаю, как перебирать внешние папки, такие как 0017 и внутренние, и называть файлы csv так, как я хочу.

Screen-cap of my files

Мой код выглядит так:

for subdir, dirs, files in os.walk('../kepler'):
    for file in files:
        filepath = subdir + os.sep + file
        if filepath.endswith(".fits"):
            extract data
        write to csv file

Очевидно, это будет перебирать все файлы в папке kepler, поэтому он не будет работать.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Если вам необходимо отслеживать, как далеко вы зашли в структуру каталогов, вы можете сосчитать разделитель пути к файлу (os.sep). В вашем случае это /, потому что вы на Mac.

for path, dirs, _ in os.walk("../kepler"):      
  if path.count(os.sep) == 2:
    # path should be ../kepler/0017  
    for dir in dirs:  
      filename = dir + ".csv"
      data_files = os.listdir(path + os.sep + dir)
      for file in data_files:
        if file.endswith(".fits"):
          # Extract data
          # Write to CSV file

Насколько я могу судить, это соответствует вашим требованиям, но дайте мне знать, если я что-то пропустил.

0 голосов
/ 05 ноября 2018

Попробуйте этот код, он должен напечатать путь ко всем вашим файлам ".fits":

# !/usr/bin/python

import os
base_dir = './test'

for root, dirs, files in os.walk(base_dir, topdown=False):
  for name in files:
    if name.endswith(".fits"):
      file_path = os.path.join(root, name) #path of files
      print(file_path)
    # do your treatment on file_path

Все, что вам нужно сделать, это добавить свое конкретное лечение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...