Я пытаюсь написать сценарий, который перемещается по каталогу и идентифицирует файлы 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 \, но никогда не переходит в следующую папку.
Спасибо!
Это потому, что вы определили два раза? Один раз как '' dirs = [] '' и снова в '' для subdir, dirs, файлов в os.walk ('' Попробуйте изменить '' dirs = [] '' на что-то вроде '' found = [] '', а затем также изменить '' dirs.append'' на '' found.append'' – Steve
@Steve - это правильно. os.walk использует список dirs для продолжения итерации. Вы можете добавлять и удалять вещи для изменения того, что посмотрел на следующий: вы продолжаете добавлять cur, поэтому он продолжает обрабатывать cur. – tdelaney
Спасибо, ребята, я больше не буду писать код, пока он болен! – user3368693