检查目录是否存在,以便for循环继续运行

时间:2019-01-31 01:58:08

标签: python exception directory global-variables glob

我想知道如何检查我的路径是否存在于全局for循环中。我当时想在if语句中嵌入if语句,但是我意识到这是行不通的。我需要在循环之前检查一下。但这没有意义,因为如果“ 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)

不幸的是,这行不通。

我发现了类似的问题here,但这不是很有帮助。

我想要for循环(如果目录不存在),让它继续,但是引发关于哪个目录不存在的异常。

1 个答案:

答案 0 :(得分:0)

您提供的代码将获取与给定glob匹配的路径列表,然后立即在该列表上进行迭代,如果其中任何一个在迭代过程中消失,则将引发Exception。

仅当扩展glob到检查路径是否存在之间删除文件时,才会抛出该异常。

如果我错了,请告诉我,但是我想您要尝试的是获取程序开始时存在的文件列表,然后在其中任何一个消失时引发Exception。您可以这样做:

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和{{1}的并集}。

还请注意,这不是递归的。如果有人删除了您所在目录的子目录,则不会抛出异常,因为它也不位于new_list中。