在同一脚本中分析后尝试将数据移动到新目录

Trying to move data to a new directory after analysis in the same script

所以我有代码可以为我完成对成像数据的分析。这段代码工作正常,只是数据没有输出到正确的文件夹中。相反,它输出的文件夹太高了。这显然是我想在较长的 运行 中修复的问题,但由于我在某些时间限制下,我想将代码输入到我的脚本中,该代码只会将文件移动到我拥有的正确 folder/directory创建。我已经尝试过 mv 和 shutil 命令,但它们似乎不起作用。如果有人对如何 fix/improve 我将这些文件移动到正确位置的方法提出建议,我将不胜感激。如果有人对为什么文件被输出到错误的目录有建议,那将是很棒的。我对编码比较陌生,也不是专家,所以请原谅任何明显的错误。谢谢。

这是我设置目录的地方

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 而不是 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)

您的问题很可能出现在第一行。您可能希望将其更改为更精确,指向一个确切的目录而不是 os.getcwd()os.getcwd() 将指向进程从何处执行,无论您从何处开始 python 运行,因此它可能会发生变化。您可能想以某种方式对其进行硬编码。

例如,您可以使用类似这样的内容来指向文件所在的目录: Find current directory and file's directory

您可以考虑做的另一件事是在最后几行中打印出 dst 并查看它是否符合您的期望。您还可以使用 PDB 实时检查该值: https://pymotw.com/2/pdb/

编辑:

您的问题是使用 shutil.move() 的相对路径。您应该确保路径是绝对路径,请参阅此答案以获取更多信息:

计算器。com/a/22230227/7299836