2014-10-02 4 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 = [] '' и снова в '' для subdir, dirs, файлов в os.walk ('' Попробуйте изменить '' dirs = [] '' на что-то вроде '' found = [] '', а затем также изменить '' dirs.append'' на '' found.append'' – Steve

+0

@Steve - это правильно. os.walk использует список dirs для продолжения итерации. Вы можете добавлять и удалять вещи для изменения того, что посмотрел на следующий: вы продолжаете добавлять cur, поэтому он продолжает обрабатывать cur. – tdelaney

+0

Спасибо, ребята, я больше не буду писать код, пока он болен! – user3368693

ответ

1

Вы вносите изменения dirs, который используется os.walk, чтобы выяснить, в какой директории рекурсия в следующем. Создайте отдельную переменную, чтобы сохранить свои результаты.

+0

Это было невероятно глупо. Это то, что я получаю от написания кода во время болезни! за помощь – user3368693

Смежные вопросы