代码:
def return_dcm(file_path, check_term = 'Prostate'):
# Read all DCM (slices) files within a directory and order the files based on filename
out_dcm = {}
for dirName, subdirList, fileList in os.walk(file_path):
c_dcm = []
cur_name = ""
dir_split = dirName.split("/")
for f_chk in dir_split:
if check_term in f_chk:
cur_name = f_chk
for filename in fileList:
if ".dcm" in filename.lower():
name = int(os.path.splitext(filename)[0])
c_dcm.append((os.path.join(dirName,filename), name))
if len(c_dcm) > 0:
c_dcm = sorted(c_dcm, key = lambda t: t[1]) # Sort into correct order
out_dcm[cur_name] = [c[0] for c in c_dcm] # Store in dictionary
return out_dcm
d_dcm = return_dcm('./../data/train/')
在尝试浏览几个文件夹时,os.walk()出现了一个奇怪的错误。所以这是我现在导航到的文件的文件夹结构:
data\train\Prostate-3T\Prostate3T-01-0001\03-15-2003-MR prostaat kanker detectiemc MCAPRODET-79232\2-t2tsetra-49698
我正在使用调试器来查看此代码。基本上,问题似乎出在dirName上。我在第一次迭代时就这样开始就很好了(我在说第一个for循环):
./../data/train/
第二次迭代也可以:
./../data/train/Prostate-3T
但是在第三次迭代中发生了一些奇怪的事情:
./../data/train/Prostate-3T\\Prostate3T-01-0001
请注意,如何代替添加“ /”,而是添加双反斜杠来分隔Prostate-3T和Prostate3T-01-0001 在此之后的所有迭代中也会发生这种情况
这显然会在以后弄乱代码,因为使用了它:
dir_split = dirName.split("/")
有人知道为什么会这样以及如何解决吗?
(PS:与以上内容无关,但此代码不是我的,可以在这里找到:https://github.com/jancio/3D-U-Net-Prostate-Segmentation)