J'ai donc un code qui complète une analyse pour moi sur les données d'imagerie. Ce code fonctionne correctement sauf que les données ne sont pas sorties dans le bon dossier. Au lieu de cela, il sort un dossier trop haut. C'est quelque chose que je veux évidemment réparer à long terme, mais comme je suis sous certaines contraintes de temps, je veux entrer du code dans mon script qui va simplement déplacer les fichiers dans le dossier/répertoire que j'ai créé. J'ai essayé les commandes mv et shutil mais elles ne semblent pas fonctionner. Je serais reconnaissant si quelqu'un avait une suggestion sur la façon de corriger/améliorer ma méthode de déplacement de ces fichiers à l'emplacement correct. Si quelqu'un a une suggestion pour savoir pourquoi les fichiers sont sortis dans le mauvais répertoire, ce serait génial. Je suis relativement nouveau dans le codage et aucun expert donc s'il vous plaît pardonner les erreurs évidentes. Je vous remercie.Essayer de déplacer des données vers un nouveau répertoire après analyse dans le même script
C'est là que je mets mes répertoires
subject_dir = os.getcwd()
dti_dir = os.path.abspath(os.path.join(subject_dir, 'dti'))
dti_input_dir = os.path.abspath(os.path.join(dti_dir, 'input'))
C'est là je suis entré dans quelques raccourcis
eddy_prefix = 'eddy'
input_path = dti_input_dir
output_prefix = 'dtifit'
output_path = '../dti/dtifit'
output_basename = os.path.abspath(os.path.join(dti_dir, output_path))
infinite_path = os.path.join(os.getenv('INFINITE_PATH'), 'infinite')
dti30 = 'dti30.nii.gz'
dti30_brain = 'bet.b0.dti30.nii.gz'
dti30_mask = 'bet.b0.dti30_mask.nii.gz'
C'est là où je courais mon test.
Le test est en cours d'exécution, mais mes données sont outpputed dans dti_dir et non output_basename (c'est ma deuxième question)
dti = fsl.DTIFit()
dti.inputs.dwi = os.path.join(input_path, eddy_prefix + '.nii.gz')
dti.inputs.bvecs = os.path.join(input_path, eddy_prefix + '.eddy_rotated_bvecs')
dti.inputs.bvals = os.path.abspath(os.path.join(infinite_path, 'dti30.bval'))
dti.inputs.base_name = output_basename
dti.inputs.mask = os.path.join(input_path, dti30_mask)
dti.cmdline
Création du répertoire de sortie si n'existe pas.
Cela fonctionne très bien et le répertoire est créé dans l'emplacement approprié.
if not os.path.exists(output_basename):
os.makedirs(output_basename)
print('DTI Command line')
print(dti.cmdline)
res = dti.run()
exit()
print('DTIFIT Complete!')
Ici j'essaie de déplacer les fichiers et je reçois l'erreur: IOError: [Errno 2] No such file or directory:
même si je sais que les fichiers existent
src = dti_dir
dst = output_basename
files = os.listdir(src)
for f in files:
if (f.startswith("dtifit_")):
shutil.move(f, dst)
Salut Christopher, Merci pour votre réponse rapide. Pour la première partie de vos suggestions, j'ai oublié de mentionner une chose (très nouvelle à cela). J'ai environ 200 ensembles de données sur lesquels je lance ce code, donc je crée un fichier .txt avec les fichiers appropriés, c'est là qu'intervient os.getcwd(). Je l'ai ensuite exécuté dans une boucle for dans ma fenêtre de commande. Il ressemble à ceci: pour ii en $ (cat dtifit_test.txt); do cd $ {INFINITE_MRI_DATA}/$ {ii}; nohup nipype_dtifit.py; terminé. Pour votre deuxième partie, j'ai imprimé les variables et elles sont ce que je veux qu'elles soient. Je vais aussi regarder dans PDB merci pour cela! –
Peut-être vérifier cette réponse: http://stackoverflow.com/a/22230227/7299836 Fondamentalement, shutil attend un chemin d'accès complet au fichier, pas seulement le nom du fichier que vous passez! –
Merci! Ce lien était génial, j'ai pu le réparer. Je n'avais pas réalisé que j'avais aussi besoin de ce chemin complet pour le fichier. –