проверить существование каталога, чтобы цикл продолжался - PullRequest
0 голосов
/ 31 января 2019

Мне было интересно, как я могу проверить, существует ли мой путь в глобальном цикле for.Я думал о том, чтобы встроить оператор if в свой цикл for, но я понял, что это не работает.Мне нужна проверка перед моей петлей.Но это не имеет смысла, потому что как я могу заставить его циклически проходить по пути, если «оператор if» находится перед циклом for?

for path in glob.glob("/Users/Downloads/FATES/*network5_01"):                                                                                                                                              
  if not os.path.exists(path):
    raise Exception("No results found from glob expression", path)

К сожалению, это не работает.

Я нашел похожий вопрос здесь , но он не очень помог.

Я хочу цикл for (если каталог не существует), чтобы он продолжался, но выдавать исключение относительно того, какой каталог не существует.

1 Ответ

0 голосов
/ 31 января 2019

Код, который вы предоставили, собирается получить список путей, соответствующих данному глобу, а затем сразу же выполнить итерацию по этому списку и выдать исключение, если какой-либо из них исчезнет во время итерации.

Это исключение будет выдается только в том случае, если файл удален между расширением glob и проверкой существования пути .

Скажите, если я ошибаюсь, но я думаю, чтовы пытаетесь сделать, это получить список файлов, которые существуют в начале программы, а затем вызвать исключение, когда любой из них исчезнет.Что вы можете сделать следующим образом:

import time                                                                                                                                                                                             

# Get the list at program start.
original_list = glob.glob("/Users/kjoyner/src/*") 

while True: 
    time.sleep(1) # Do work here.
    new_list = glob.glob("/Users/kjoyner/src/*") 
    for file in original_list: 
        if file not in new_list: 
            raise Exception("Missing file: {0}".format(file)) 

Когда я удаляю файл в этом каталоге в другом окне, я вижу:

Exception: Missing file: /Users/kjoyner/src/sacrificial

Обратите внимание, что если кто-то добавляет файл после запуска программы, а затем удаляет его, тогда этот код не поймает это, потому что файл не будет в original_list.Если вы хотите поймать это, вам нужно использовать наборы вместо списков и обновить original_list (который вы бы хотели переименовать) в каждом цикле, чтобы объединить original_list и new_list.

Обратите внимание, что это не рекурсивно.Если кто-то удалит подкаталог каталога, в котором вы находитесь, исключение не будет сгенерировано, так как оно не было в original_list.

...