2014-10-02 109 views
3

我想写一个脚本,浏览目录并用指定的标题信息标识DICOM文件。在找到符合条件的文件后,如果文件目录尚未存在,我想将该文件的目录添加到列表中。os.walk卡在一个无限循环

import dicom 
import os 
import os.path 
import re 

param = "PatientID" 
val = "7rAgWJ." 
rootDir = "C:\\work\\SJM\\WRIX" 

dirs = [] 
i = 0 

for subdir, dirs, files in os.walk(rootDir, topdown = True): 
    for f in files: 
     try: 
      f = os.path.join(subdir, f) 
      ds = dicom.read_file(f) 
      attr = getattr(ds, param) 
      if attr == val: 
       cur = os.path.dirname(os.path.realpath(f)) 
       if cur not in dirs: 
        dirs.append(cur); 

我的问题是我的代码永远不会终止,因为我的外循环连续运行。循环循环遍历C:\ work \ SJM \ WRIX \中的其中一个目录中的文件,但从不“继续”到下一个文件夹。

谢谢!

+1

是因为您有dirs定义了两次吗? os.walk('' )尝试将''dirs = []''改为“'found ='等类似的东西''dirs = []''并且再次在''中为subdir,dirs, []''然后把''dirs.append''改成''found.append'' – Steve 2014-10-02 23:45:09

+0

@Steve是对的。os.walk使用dirs列表继续迭代。你可以添加和删除东西来改变什么是看着下一个,你继续添加cur,所以它继续处理curl。 – tdelaney 2014-10-02 23:47:15

+0

谢谢你们,我不会再编写代码,而再次生病 – user3368693 2014-10-03 19:33:42

回答

1

您正在修改dirsos.walk使用该值来确定下一个要递归的目录。创建一个单独的变量来存储您的结果。

+0

这是令人难以置信的愚蠢的我这是我得到的编写代码,而生病!寻求帮助 – user3368693 2014-10-03 19:32:56