我需要一些帮助来为这个问题创建一个python脚本。
基本上我有一张excel表,上面有患者病历号码列表:
10000
10001
10002
10003
etc...
我有一个基本格式的驱动器:
-AllImages
--A
---A1
---A2
----10004
---A3
----10005
----10006
----10007
--B
---B1
----10008
----10009
-----10009_MRI
-----10009_CT
---B2...
所需的输出是:
-OutputImages
--10000
--10001
--10002
---10002_MRI
---10002_CT
--10003
etc...
但它们并不总是按照确切的顺序排列。因此,这些终端患者文件夹是我需要复制到不同的目录,但它们还包含其他文件夹,其中还包含患者10009中所示的文件名中的医疗记录编号。我不想单独将这些子文件夹拉出来从主患者文件夹,所以当我搜索我想停在最高文件夹与患者医疗记录的名称。
我编写了一个脚本,查找文件夹,并在每个病历号旁边输出一个csv,说明可以找到图像的位置,或者根本找不到图像。但是,我无法弄清楚如何将它们复制到新位置。这似乎是一个超级简单的操作,但我无法弄明白!
这是我正在运行的当前脚本,我试图用我在本网站上找到的一些代码修改我写的其他脚本,但它不起作用,我不太了解它,知道原因。
import os
import shutil
import xlrd
import easygui
import numpy as np
import csv
#get the excel sheet
print ('Choose patient data sheet')
master_ws = 'TestDemo/TestPatientList.xlsx'
#easygui.fileopenbox()
workbook = xlrd.open_workbook(master_ws)
ws = workbook.sheet_by_name('Sheet1')
num_rows = ws.nrows - 1
#get correct MRN column
col = int(input ('Enter the column with patient MRNs (A=0, B=1, etc): '))
#file browser for choosing which directory to index
print ('Choose directory for indexing')
RootDir1 = r'TestDemo/TestDirectory'
#easygui.diropenbox()
#choose output folder
print ('Create output folder')
TargetFolder = r'Scripts/TestDemo/TestOutputDirectory'
#easygui.diropenbox()
#sorts directory titles into array of strings
folders = [f for f in sorted(os.listdir(RootDir1))]
folders = np.asarray(folders, dtype=str)
#gets worksheet row values and puts into an array of strings
arr = [ws.row(0)]
for i in range(1,num_rows+1):
row = np.asarray(ws.row_values(i))
arr = np.append(arr, [row], axis = 0)
#matching between folders and arr, ie. between directory index and master sheet
for y in range(1, len(arr)):
for root, dirs, files in os.walk((os.path.normpath(RootDir1)), topdown=False):
for name in dirs:
if name.find(str(int(float(str(arr[y, col]))))):
print ("Found" + name)
SourceFolder = os.path.join(root,name)
shutil.copy(SourceFolder, TargetFolder) #copies to new folder