1

我有一个任务,我想检查目录中是否存在特殊文件 *.part。如果文件存在,请再次检查,如果不存在,则打印“文件已删除”。

我使用 os.listdir(),接下来对于 lisdir 中的每个文件,我使用 fnmatch(file, '*.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")

谢谢!

4

2 回答 2

1

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

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

于 2016-12-28T12:34:18.460 回答
0

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

用途os.path.exists:导入操作系统、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)
于 2016-12-28T12:47:03.547 回答