【问题标题】:check directory existence so for loop keeps running检查目录是否存在,以便 for 循环继续运行
【发布时间】:2019-06-24 10:09:04
【问题描述】:

我想知道如何检查我的路径是否存在于全局 for 循环中。我正在考虑在我的 for 循环中嵌入一个 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 循环(如果目录不存在)继续,但会引发关于哪个目录不存在的异常。

【问题讨论】:

  • 您正在尝试在所有子目录中搜索文件?

标签: python exception directory global-variables glob


【解决方案1】:

您提供的代码将获取与给定 glob 匹配的路径列表,然后立即迭代该列表,如果其中任何一个在迭代期间消失,则抛出异常。

只有在 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 中。

【讨论】:

    猜你喜欢
    • 2020-08-09
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 2021-02-20
    • 2019-01-31
    • 1970-01-01
    相关资源
    最近更新 更多