Учитывая, что ваша папка структурирует этот код go во всех подпапках ./[rootdir]/[mrn]/[followup]/
и обрабатывает все данные, если оба файла доступны.
import os
import nibabel as nib
import numpy as np
import pandas as pd
rootdir = "./PET-CT/"
# Search all mrn folders on level ./[rootdir]/..
for mrn in os.listdir(rootdir):
# Search all followup folders on level ./[rootdir]/[mrn]/..
for followup in os.listdir(os.path.join(rootdir,mrn)):
try:
# YOUR CODE
fdir=os.path.join(rootdir,mrn,followup)
roi = nib.load(os.path.join(fdir,'ROI_xyz.nii.gz'))
pet = nib.load(os.path.join(fdir,'pet_xyz.nii.gz'))
copy_pet = nib.Nifti1Image(pet.get_fdata(),pet.affine)
nib.save(copy_pet,'copy_pet_{}_{}.nii.gz'.format(mrn,followup))
roi_indices, roi_counts = np.unique(roi.get_fdata(), return_counts=True)
avg_count = roi_counts[1:].mean()
uptake_ratio = (roi_counts/avg_count)
df = pd.DataFrame({'ROI': roi_indices[1:], 'Counts': roi_counts[1:], 'UptakeRatio': uptake_ratio[1:]})
# saving the dataframe
df.to_csv('uptake_ratio_{}_{}.csv'.format(mrn,followup))
except:
print("An exception occurred when processing folder {}".format(fdir))
Из вашего описания мне не было понятно, где сохранить новый вывод. Если вы хотите хранить файлы, в которых вы запустили ваше приложение python, все в порядке. В противном случае вы должны изменить пути. Ниже я добавил изменения, когда ваши выходные файлы должны храниться в той же папке, что и входные файлы.
nib.save(copy_pet,os.path.join(fdir, 'copy_pet_{}_{}.nii.gz'.format(mrn,followup)))
...
df.to_csv(os.path.join(fdir,'uptake_ratio_{}_{}.csv'.format(mrn,followup)))