首页 > 解决方案 > Python 脚本日志记录(else 语句不做任何事情)

问题描述

我希望有人可以帮助我,因为我一生都无法弄清楚这一点。我仍然是 Python 的业余爱好者,并且尝试编写自己的脚本来清除我的下载文件夹并将一些消息记录到日志文件中,以计划将脚本作为计划任务运行(我的下载文件夹变得非常混乱那么为什么不自动清理它)。我的代码如下:

import os
import logging
import shutil

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s:%(name)s:%(levelname)s:%(message)s')
file_handler = logging.FileHandler('cleardownloads.log')
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)

folder = 'D:\\Downloads'
list_folder = os.listdir(folder)
number_files = len(list_folder)
#print(number_files)
for file in list_folder:
    file_path = str(os.path.join(folder, file))
    if number_files > 0:
        if os.path.isfile(file_path or os.path.islink(file_path)):
            logger.info(f'deleting file: {file_path}')
            os.unlink(file_path)
        elif os.path.isdir(file_path):
            logger.info(f'deleting folder: {file_path}')
            shutil.rmtree(file_path)
    else:
        logger.info(f'{file_path} is empty, nothing to delete')

我遇到的问题是最后的“else”语句,它没有做任何事情,消息没有被写入日志文件,即使我将其更改为打印语句,控制台也不会打印任何内容。我的 Downlads 文件夹是空的,打印出 len 甚至显示 0(在我的代码中注释掉的行)。如果我创建一些文件然后运行脚本,则会正确记录消息,例如:

2021-02-11 23:27:54,174:__main__:INFO:deleting folder: D:\Downloads\dsfds
2021-02-11 23:33:45,460:__main__:INFO:deleting folder: D:\Downloads\fdggf
2021-02-11 23:33:45,460:__main__:INFO:deleting folder: D:\Downloads\fgfg
2021-02-11 23:42:22,086:__main__:INFO:deleting file: D:\Downloads\fgd.txt
2021-02-11 23:43:34,894:__main__:INFO:deleting file: D:\Downloads\fdsf.txt

有人知道我在这里缺少什么吗?

提前致谢

标签: pythonif-statementlogging

解决方案


看起来您没有在 for 循环中更新“number_files”,因此将始终调用 if(number_files > 0) 而不是 else 语句...检查我在下面提供的代码片段:

import os
import logging
import shutil

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s:%(name)s:%(levelname)s:%(message)s')
file_handler = logging.FileHandler('cleardownloads.log')
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)

folder = 'D:\\Downloads'
list_folder = os.listdir(folder)
#print(number_files)
number_files = len(list_folder)
for file in list_folder:
    file_path = str(os.path.join(folder, file))
    if number_files > 0:
        if os.path.isfile(file_path or os.path.islink(file_path)):
            logger.info(f'deleting file: {file_path}')
            os.unlink(file_path)
        elif os.path.isdir(file_path):
            logger.info(f'deleting folder: {file_path}')
            shutil.rmtree(file_path)
    number_files = len(list_folder)

if number_files == 0:
            logger.info(f'{file_path} is empty, nothing to delete')

希望有帮助。


推荐阅读