Запустите скрипт для каждого файла TXT во всех подпапках - PullRequest
0 голосов
/ 24 марта 2020

Мне нужно запустить следующий скрипт для каждого текстового файла, расположенного во всех подпапках. Основная папка - это «симуляции», в которых есть разные подпапки (называемые «год-месяц-день»). В каждой подпапке есть текстовый файл «Diagno.inp». Я должен запустить этот сценарий для каждого файла «Diagno.inp», чтобы иметь список со следующими данными (строка для каждого дня): «год-месяц-день», «W_int», «W_dir» Вот код это работает только для подпапки. Можете ли вы помочь мне создать Аль oop?

fid=open('/Users/silviamassaro/weather/simulations/20180105/diagno.inp',  "r")
subfolder="20180105"
n = fid.read().splitlines()[51:]
for element in n:
    "do something" # here code to calculate W_dirand W_int for each day
     print (subfolder, W_int, W_dir)

Ответы [ 2 ]

1 голос
/ 24 марта 2020

Вот что я обычно делаю, когда мне нужно l oop по каталогу и его дочернему элементу рекурсивно:

import os

main_folder = '/path/to/the/main/folder'
files_to_process = [os.path.join(main_folder, child) for child in os.listdir(main_folder)]

while files_to_process:
    child = files_to_process.pop()
    if os.path.isdir(child):
        files_to_process.extend(os.path.join(child, sub_child) for sub_child in os.listdir(child))
    else:
        # We have a file here, we can do what we want with it

Это коротко, но имеет довольно сильные предположения:

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

Редактировать : добавлено еще одно возможное решение с использованием glob, благодаря комментарию @ jacques-gaudin

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

import glob

main_folder = '/path/to/the/main/folder'
files_to_process = glob.glob('%s/**/*.inp' % main_folder, recursive=Tre)

for found_file in files_to_process:
    # We have a file here, we can do what we want with it

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

0 голосов
/ 24 марта 2020

С pathlib вы можете сделать что-то вроде этого:

from pathlib import Path

sim_folder = Path("path/to/simulations/folder")

for inp_file in sim_folder.rglob('*.inp'):
    subfolder = inp_file.parent.name
    with open(inp_file, 'r') as fid:
        n = fid.read().splitlines()[51:]
    for element in n:
        "do something" # here code to calculate W_dirand W_int for each day
        print (subfolder, W_int, W_dir)

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

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