Python——划分Nifti对应模态数据并整理
问题:把DICOM的数据用MRIcron的dcm2niigui.exe转好格式以后每个被试的全部模态都在一个文件夹内,but,有人给了你一个名单,只要那些人的某几个模态的数据,比如T1像和DTI,所以该怎么办?
人数少时一个一个操作很方便,但数量大了就发现代码的方便之处,而Python正是处理这些任务明智的选择。
So,let‘s begin
- 最初想法是在当前的文件夹中处理,但是考虑到还要删除其余不需要的文件,不如以最简单的方式,就是建立一个新的文件夹来存放这些结果数据。
比如我这里zhongxin
和zhongxin_done
就分别是当前的文件夹和新建的要存放分好类数据的文件夹。
看下未整理之前的转完格式后的文件夹里的数据形式:
代码如下(以后可以迭代):
#coding=utf-8
#20190107 Nifti分类及拷贝
import sys
import os
import shutil
root_dir = u"F:\\zhongxin"
son_dir = os.listdir(root_dir)
new_dir = u'F:\\zhongxin_done'
# print(son_dir)
for son in son_dir:
# 思路是把需要的T1和DTI复制到新的文件夹中,因此先建立对应的文件夹
os.makedirs(u'F:\\zhongxin_done' + u'\\' + son)
new_son_dir = os.path.join(new_dir,son)
# 在每个人的文件夹内建立T1和DTI子文件夹存放其对应模态的数据
os.makedirs(new_son_dir + u'\\' + 't1')
os.makedirs(new_son_dir + u'\\' + 'dti')
# 查找对应模态的文件
grand_son_path = root_dir + u'\\'+ son
# 此处会列出当前文件夹下全部的一级文件和子文件夹名称
grand_son_dir = os.listdir(grand_son_path)
# print(grand_son_dir)
# 选取对应的模态并进行拷贝
for name in grand_son_dir:
oldfile= root_dir + u'\\' + son + u'\\' + name
newfile_dir = new_son_dir
# 根据文件的命名特征分类Nifti,比如这里't1mprsag'就是T1像
if 't1mprsag' in name:
shutil.copy(oldfile,newfile_dir + u'\\' + 't1')
if 'ep2ddiffDTI' in name:
shutil.copy(oldfile,newfile_dir + u'\\' + 'dti')
结果如下:
每个被试的文件夹下都有两个文件夹存放对应模态,success。
但这就完了吗?
Absolutely not!Why?
因为一般像这样命名有规则的文件虽然很容易处理,但并非总是如此,总有一种混乱令你感动,比如像下面这样转完格式以后毫无头绪的文件类型:
这样就没办法了吗?No!
可以在DICOM状态读取它的模态信息提前把各个模态分好类再转格式。此时需要用到读取DICOM信息的函数。使用Matlab或者Python都可以。我这里使用的是pydicom包。
使用dicominfo('filename')
函数,比如:
使用如下命令可得到下图的信息,然后从SeriesDescription一栏读取扫描的该模态信息,比如这里是ep2d_bold_moco_p2:dicominfo('H:\xxx\xxx')
这是matlab读取出来的结果:
这是pydicom读取出来的结果:
import pydicom
filename = r"C://xxx//xxx.IMA"
dcm = pydicom.read_file(filename)
print(dcm)
会发现读出来是一样的,都包含了被试的很多信息。
就是这样,The fishing skill is over。之后再迭代吧。
20190107