【问题标题】:Python fnmatch, check exist filePython fnmatch,检查存在的文件
【发布时间】:2017-05-12 17:49:38
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: python recursion filesystems fnmatch


    【解决方案1】:

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

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

    【讨论】:

    • 我得到了新的列表介绍“while”并将他的传入 func(),在调试中我看到它是新列表,但在 for 循环中“f”再次成为最后一个值。
    【解决方案2】:

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

    【讨论】:

    • 谢谢!任务决定!
    猜你喜欢
    • 2019-07-17
    • 2021-05-01
    • 2016-06-23
    • 2018-08-15
    • 2014-04-06
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多