Python fnmatch,检查存在的文件

标签 python recursion filesystems fnmatch

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

谢谢!

最佳答案

即使您递归地调用函数 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)

关于Python fnmatch,检查存在的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41362151/

相关文章:

python - 如何判断一个字符串是否包含有效的 Python 代码

python - 检查对象是否已在列表中(Python)

c - 使用OpenMP并行计算递归的基本案例

android - 一个进程试图 chmod 一个文件,而另一个进程已经写入该文件?

php - 在 PHP 中创建多级子文件夹结构

python - nrfutil - Nixos 上的 "ImportError: No module named main"

Python 3.7.3 无意中安装在 Mac OS 10.15.1 上 - 现在包含在 Xcode Developer Tools 11.2 中?

vim - 如何在 VIM 中递归使用 Global?

sql-server - SQL Server 中的递归好吗?

c# - 您可以使用多个过滤器调用 Directory.GetFiles() 吗?