前言
现在磁共振数据的被试量越来越多,所扫描的图像也就更多,量小的几十个,量大的成百上千,而且不论是DPABI、cat12、SPM12还是其他工具包,都需要将数据整理成合适的格式才能方便做数据处理,手动处理必将费时费力,还容易出现差错,此时用脚本编代码批处理便是最好的选择。初用python语言,感觉良好,用它来做文件的批处理的确很强大,简单明了,所以这个系列写出来便是为了记录自己的脚本,害怕那天换电脑了,这些东西便不存在了,多麻烦,这对于自己来说,未来都是宝藏,对于各位读者来说也是提供便利,小编的脚本主要围绕脑科学方面的数据进行处理,希望对读此文的读者有所增益。
一、代码实现功能介绍
小编的的.nii文件本来是都在一个文件夹中的,如下图所示:
想要实现的功能便是提取这些nii文件对应的被试编号sub-xxxxx,作为对应的被试文件夹名,并将nii文件移动到对应被试编号的文件中,做好这个之后就能放到FunImg文件夹中直接用DPABI进行预处理了,程序运行结果如下两图所示:
二、代码块简介
第一步:读取文件名
import os
import shutil
DIR = "D:\\DATA\\test"
def Movefile(DIR): # 定义函数
j = 0
for root1, path1, filename in os.walk(DIR):
for i in range(len(filename)):
if os.path.splitext(filename[i])[1] == '.nii': # 这里注意filename是个元组,splitext方法的时候只能是字符串,从后往前查找”.“
j += 1
dir_name = filename[i].split('_')[0] # split是从前往后查找目标字符用来分割字符串
print(dir_name)
第二步:设定目标文件路径
dir_path = os.path.join(DIR, dir_name) # 在目标文件夹下添加
if os.path.exists(dir_path) == 0: # 如果该文件不存在,则创建文件,反之不创建
os.mkdir(dir_path)
old_path = os.path.join(DIR, filename[i]) # 定义目标文件路径
new_path = os.path.join(dir_path, filename[i]) # 定义目标文件存放路径
第三步:复制文件,若想直接移动文件,可将copyfile改成move
shutil.copyfile(old_path, new_path) # 将目标文件移动到存放路径中
print("总共有", j, "图层文件被复制!")
第四步:调用函数,运行
Movefile(DIR) # 调用自定义函数
PS:
若有任何问题欢迎指出,或者有更加简单的处理方式也欢迎提出建议一起分享。