Python fnmatch,检查exist fi

2024-10-02 22:25:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我使用操作系统列表目录(),接下来对于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")

谢谢!在


Tags: 文件test目录home列表osdownloadsfile
2条回答

您使用的是递归,可能是从中获取的文件列表操作系统列表目录()每次都返回相同的文件列表,因此在更新之前返回True。在

试着用非递归的方式写这篇文章,并确保从中检索到的列表操作系统列表目录()不是每次迭代都一样。在

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

相关问题 更多 >