python - 发电机不能自己耗尽

标签 python generator

我正在尝试连接两个函数,一个遍历目录并查找文件名,将名称发送到函数以检查是否存在超过 30 天的文件,如果不满足条件则删除文件。

我尝试练习使用生成器,并使函数之间优雅地“流动”,但它破坏了 for 循环和函数,因此需要重新激活函数。

import os
from datetime import datetime,timedelta

PATH = os.path.abspath(os.path.dirname(__file__)) + '\folder'


def get_dates(p):
    for path, dirs, files in os.walk(p):
        for file in files:
                fullname = path+ '\\'+file
                mtime = os.stat(fullname).st_ctime

                yield (delete_not_needed(fullname, mtime))


def delete_not_needed(fullname, mtime):
    file_time = datetime.fromtimestamp(mtime)
    if datetime.today()-file_time> timedelta(days=30):
        os.remove(fullname)

if __name__ == '__main__':
    next(get_dates(PATH))

我怎样才能让这项工作连接这些功能?

最佳答案

您应该返回文件名,然后遍历生成器以删除这些文件。

def delete_not_needed(fullname, mtime):
    file_time = datetime.fromtimestamp(mtime)
    if datetime.today()-file_time> timedelta(days=30):
        return fullname

if __name__ == '__main__':
    files_to_delete = get_dates(PATH)
    for file in files_to_delete:
        if file:
            os.remove(file)

关于python - 发电机不能自己耗尽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57920746/

相关文章:

python - 无法理解 python 生成器

python - .bisect 在字典中找不到最接近的值

python - 是否可以在 Python Twisted 中完全禁用日志记录?

python - PySpark:如何在PySpark转换中指定dropna轴?

python - 为什么不能在递归函数中使用 yield

来自生成器的 Python 字节对象

python - 解码Jpeg/内容: 0 'refers to a tensor that does not exist

python - 如何对新加载的网页进行截图

Python 生成器函数名称——前缀有用吗?

python - 将 while 转换为生成器的速度减慢了 3.4 倍