所以我有影像學資料完成分析我的代碼分析後,將數據移動到一個新的目錄。此代碼工作正常,但數據未輸出到正確的文件夾中。相反,它輸出的文件夾太高。這事我當然希望從長遠看來解決,但因爲我在一定的時間限制,我想輸入代碼到我的腳本,將只需將文件移動到我創建了正確的文件夾/目錄。我已經嘗試了mv和shutil命令,但它們似乎並沒有工作。如果有人提出瞭如何解決/改進將這些文件移動到正確位置的方法,我將不勝感激。如果有人對文件被輸出到錯誤目錄的原因提出建議,那將會很棒。我對編碼比較陌生,沒有專家,所以請原諒任何明顯的錯誤。謝謝。試圖在同一個腳本
這是我建立了我的目錄
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'))
這是我進了幾個快捷鍵
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'
這是我跑我的測試。
測試正在運行,但我的數據在dti_dir被outpputed而不是output_basename(這是我的第二個問題)
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
創建輸出目錄,如果不存在。
這是工作的罰款,並在適當的位置創建的目錄。
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!')
在這裏,我試圖移動文件,我得到的錯誤:即使IOError: [Errno 2] No such file or directory:
我知道文件存在
src = dti_dir
dst = output_basename
files = os.listdir(src)
for f in files:
if (f.startswith("dtifit_")):
shutil.move(f, dst)
嗨克里斯托弗, 感謝您的快速響應。對於你的建議的第一部分,我忘了提一件事(對此很新穎)。我有大約200組數據運行此代碼,因此我使用正確的文件創建了一個.txt文件,以便os.getcwd()進入其中。然後我在我的命令窗口中的for循環中運行它。它看起來像這樣:for $ in(cat dtifit_test.txt);做cd $ {INFINITE_MRI_DATA}/$ {ii}; nohup nipype_dtifit.py;完成。 關於你的第二部分,我並打印變量,它們是什麼,我希望他們能。我也會考慮PDB謝謝你! –
也許看看這個答案: http://stackoverflow.com/a/22230227/7299836 基本上,shutil期望文件的完整路徑,而不僅僅是你傳入的文件名! –
謝謝!這個鏈接非常好,我可以修復它。我沒有意識到我也需要文件的完整路徑。 –