所以我有代码来完成对成像数据的分析。除了数据没有输出到正确的文件夹外,此代码工作正常。相反,它是被输出一个文件夹太高。从长远来看,这显然是我想要解决的问题,但由于时间限制,我想在脚本中输入代码,只需将文件移动到我创建的正确文件夹/目录中即可。我试过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\u dir中输出,而不是输出\u 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()
的相对路径。您应该确保路径是绝对路径,有关详细信息,请参阅以下答案:你知道吗stackoverflow.com/a/22230227/7299836你知道吗
相关问题 更多 >
编程相关推荐