我有一个任务,我想检查目录中是否存在特殊文件* .part。 如果文件存在,请再次检查,如果没有,则打印"文件已删除"。
我使用os.listdir(),对于lisdir中的每个文件,我使用fnmatch(文件,' * .part'),然后再次获取lisdir并递归地涉及相同的函数。
当我删除此文件时,fnmatch返回" true"。我无法理解......"为什么"?
这是我的代码:
import os, fnmatch
def func(filenames):
for f in filenames:
while fnmatch.fnmatch(f, '*.part'):
filenames = os.listdir("/home/gromov/Downloads/test/")
func(filenames)
if __name__ == "__main__":
func(os.listdir("/home/gromov/Downloads/test/"))
print("file was deleted")
谢谢!
答案 0 :(得分:1)
您正在使用递归,也许您从os.listdir()获得的文件列表每次都返回相同的文件列表,因此在更新之前返回True。
尝试以非递归的方式编写此函数,并确保从os.listdir()检索的列表与您每次迭代时的列表不同。
答案 1 :(得分:0)
即使你递归地调用你的函数func
,第一次迭代中的f
永远不会改变,fnmatch
只会检查字符串,如果文件存在则不会。
使用os.path.exists
:
import os,fnmatch,time
def func(filenames):
for f in filenames:
if fnmatch.fnmatch(f, '*.part'):
# wait until deleted
while os.path.exists(f):
time.sleep(0.1)