国庆七天假,工作六天半。。。
三天时间浪费在整理数据,最后半天写了个脚本来整理。。。
特此在国庆假期结束前记录一下。。。
1.读取文件夹名称
# 读取文件名称并写入txt文件
import os
path = r'G:\ADNI\ADNI1\T1\MCI'
file = open("MCI.txt", 'w')
for name in os.listdir(path):
# print(name)
name = name + '\n'
file.write(name)
file.close()
print("保存文件成功")
2.创建文件夹
import os
path1 = 'G://ADNI//ADNI1//1.5T//MCI' # 指定名称文件夹所在路径
path2 = 'G://ADNI//ADNI1//3T//MCI//' # 新建文件夹所在路径
# 根据path1中文件夹的名称在path2中创建相应的文件夹
def MkDir():
dirs = os.listdir(path1)
for dir in dirs:
file_name = path2 + str(dir)
os.mkdir(file_name)
# 根据txt中的名称创建文件夹
def MkDir2():
# Cname_MCI中存放是的要创建的文件夹名称
with open("Cname_MCI.txt", 'r') as f:
for line in f.readlines():
linestr = line.strip()
linestrlist = linestr.split("\t")
file_name = path2 + linestrlist[0]
os.mkdir(file_name)
3.移动文件
# 移动文件
import shutil
path = 'G:\\ADNI\\ADNI1\\T1\\MCI\\'
sourcepath = 'G:\\ADNI\\ADNI1\\T1\\MCI\\'
targetpath = 'G:\\ADNI\\ADNI1\\T1\\MCI\\'
with open("MCI.txt", 'r') as f:
for line in f.readlines():
linestr = line.strip()
linestrlist = linestr.split("\t")
i = linestrlist[0]
i = i[0:10]
sourceDir = sourcepath + linestrlist[0] + '\\' + 'ADNI' + '\\' + i
targetDir = targetpath
shutil.move(sourceDir, targetDir)
shutil.move 用来移动文件
4.删除文件夹
import os
import shutil
path = 'G:\\ADNI\\ADNI1\\T1\\MCI\\'
with open("MCI.txt", 'r') as f:
for line in f.readlines():
linestr = line.strip()
linestrlist = linestr.split("\t")
i = linestrlist[0]
repath = path + i
# os.remove(path)
shutil.rmtree(repath)
删除这里在用的时候出了点问题,使用 os.remove 的时候显示拒绝访问,然后看了下面这个博文才知道 os.remove 不能用来删除文件夹。于是采用了 shutil 的 rmtree 函数。
参考:https://blog.youkuaiyun.com/wudj810818/article/details/51076953
其实大家最终的目的肯定不会只有这么简单的批量创建、移动、删除,(如果是就当我没说),但是组合一下,就可以创建一个文本来记录操作的文件或文件夹,然后加入一些 for 循环或 if 判断,就可以达到自己更复杂的目的了。
鄙人利用一些信息对ADNI的几千张MRI进行了一些挑选分类,在用脚本之前手动分了三天,越分越乱。
其中涉及到的实际名称请各位忽略,路径中的 \ 和 / 自己用对就行了,我这里没有细究,跑起来结果对了就没留意,也没有放到函数里,就只是简单记录一下吧。有时间再多了解了解 shutil 吧。
最后一句:工欲善其事必先利其器,所有的机械式、重复式工作尽量想着交给机器来做。