Python fnmatch,检查存在文件

时间:2016-12-28 12:26:53

标签: python recursion filesystems fnmatch

我有一个任务,我想检查目录中是否存在特殊文件* .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")

谢谢!

2 个答案:

答案 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)