所以我有影像学资料完成分析我的代码分析后,将数据移动到一个新的目录。此代码工作正常,但数据未输出到正确的文件夹中。相反,它输出的文件夹太高。这事我当然希望从长远看来解决,但因为我在一定的时间限制,我想输入代码到我的脚本,将只需将文件移动到我创建了正确的文件夹/目录。我已经尝试了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期望文件的完整路径,而不仅仅是你传入的文件名! –
谢谢!这个链接非常好,我可以修复它。我没有意识到我也需要文件的完整路径。 –