Python fnmatch,检查存在的文件

Python fnmatch, check exist file

我有一个任务,我想检查目录中是否存在特殊文件*.part。 如果文件存在,请再次检查,如果不存在,则打印 "file was deleted".

我使用 os.listdir(),接下来对 lisdir 中的每个文件,我使用 fnmatch(file, '*.part'),然后再次获取 lisdir 并递归地涉及相同的函数。

当我删除这个文件时,fnmatch return "true"。看不懂..."why"?

这是我的代码:

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")

谢谢!

您正在使用递归,也许您从 os.listdir() returns 获得的文件列表每次都列出相同的文件,因此您在更新之前返回 True。

尝试以 none 递归方式编写此代码,并确保从 os.listdir() 检索的列表在每次迭代时都不相同。

即使您递归调用函数 func,第一次迭代中的 f 也不会改变,并且 fnmatch 仅检查字符串而不检查文件是否存在。

使用os.path.exists: 导入 os、fnmatch、时间

def func(filenames):
    for f in filenames:
        if fnmatch.fnmatch(f, '*.part'):
            # wait until deleted
            while os.path.exists(f):
                time.sleep(0.1)