因为工作的原因,需要吧dicom压缩包的文件名改为这患者的名字,故写了改脚本,原理是通过python解压zip压缩包,放入"D:\test\"这目录下,读取患者姓名来改压缩包名字,完成后再删除test里面内容,
import os
import pydicom
import zipfile
import xlrd
from xpinyin import Pinyin
k = "D:\\6820220321017.zip"
m = "D:\\test\\"
path = "D:\\gg\\"
excl = "D:\\gg.xls"
s = {} #存放原压缩包和解压dicom文件对应关系
s1 = {}
def print_hi(name):
file_name_list = os.listdir(path)
for f in file_name_list:
fg(f) #待改名称的目录下的文件名
file_name_list = os.listdir(m)
for f in file_name_list:
#print("解压后"+m+f)
ds = pydicom.dcmread(m+f) #获取解压后的dicom患者姓名
os.remove(m+f)
st=ds.PatientName
age=ds.PatientAge
a=path + str(st)+"-"+str(age)
a1=a.replace(" ", "")
print(a1)
os.rename(path+s[f], a1+'.zip') #把压缩文件改为患者名
def fg(k):
u=path+k
#print("待解压"+u)
zip_file = zipfile.ZipFile(u)
zip_list = zip_file.namelist() # 得到压缩包里所有文件
i = 0
for f in zip_list:
i = i + 1
if i == 2:
break;
s[f]=k
zip_file.extract(f, m) # 循环解压文件到指定目录
zip_file.close() # 关闭文件,必须有,释放内存
#读取表格,并获取到拼音
def fg2():
table = xlrd.open_workbook(excl)
sheet = table.sheet_by_index(0)
col_data = sheet.col_values(0)
p = Pinyin()
k=[]
jj={}
for f in col_data:
k.append(p.get_pinyin(f,'').upper()+'.zip')
jj=dict(zip(k,col_data))
return jj
#改压缩包中文名称
def fg3(jj):
file_name_list2 = os.listdir(path)
for k in jj.keys():
for k1 in file_name_list2:
last_index = k1.rfind('-')
if k1[0: last_index]+'.zip'==k:
if os.path.exists(path+jj[k] + '.zip'):
os.rename(path + k1, path + jj[k] + '222.zip')
else:
os.rename(path + k1, path + jj[k] + '.zip')
if __name__ == '__main__':
print_hi('PyCharm')
jj=fg2()
fg3(jj)