python - 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
有人知道我在这里缺少什么吗?
提前致谢
解决方案
看起来您没有在 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')
希望有帮助。
推荐阅读
- c# - 简化任务 foreach 循环 c#
- javascript - 反应嵌套组件错误的道具功能onClick
- ios - 带乘数的领先约束不起作用
- javascript - 无法使用 jQuery 访问元素
- angular6 - 谁能解释为什么我们需要 ngModel 和 #nameField="ngModel" 都在 angular6 表单的相同输入字段中?
- php - imagecopyresampled 似乎没有执行
- reactjs - 动态形式:TypeError:无法读取未定义的属性“值”
- c# - 使用 HTML 敏捷性获取属性值
- android-ndk - 使用 ndk 创建本机后台应用程序
- python - 使用延迟从powershell循环调用python