我有一项任务,我想检查目录中是否存在特殊文件*.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")谢谢!
发布于 2016-12-28 12:47:03
即使递归调用函数func,第一次迭代中的f也不会改变,如果文件存在,fnmatch只检查字符串,而不检查字符串。
使用os.path.exists:导入os、fnmatch、time
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-28 12:34:18
您正在使用递归,可能您从os.listdir()获得的文件列表每次都会返回相同的文件列表,因此在更新之前返回一个True。
试着用非递归的方式编写它,并确保从os.listdir()检索的列表不是每次迭代时相同的。
https://stackoverflow.com/questions/41362151
复制相似问题