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