我想知道如何检查我的路径是否存在于全局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循环(如果目录不存在),让它继续,但是引发关于哪个目录不存在的异常。
答案 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
中。