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

2024-05-26 22:55:41 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有代码来完成对成像数据的分析。除了数据没有输出到正确的文件夹外,此代码工作正常。相反,它是被输出一个文件夹太高。从长远来看,这显然是我想要解决的问题,但由于时间限制,我想在脚本中输入代码,只需将文件移动到我创建的正确文件夹/目录中即可。我试过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)

Tags: 文件path目录inputoutputprefixosdir
1条回答
网友
1楼 · 发布于 2024-05-26 22:55:41

你的问题很可能就在第一行。您可能希望将其更改为更精确的目录,指向一个精确的目录,而不是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你知道吗

相关问题 更多 >

    热门问题