我想知道如何检查我的路径是否存在于全局for循环中。我想在我的for looop中嵌入一个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)
不幸的是,这不起作用。
我在这里找到了类似的问题,但没有太大帮助。
我想要for循环(如果目录不存在),让它继续,但引发一个关于哪个目录不存在的异常。
您提供的代码将获得与给定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
中。