Python基础入门 Day90 文件处理与错误日志记录

54次阅读
没有评论

共计 2440 个字符,预计需要花费 7 分钟才能阅读完成。

在处理文件和执行其他任务时,程序可能会遇到错误或异常。为了有效地跟踪和解决问题,我们需要记录错误信息。Python 提供了强大的 logging 模块,可以帮助我们记录程序的运行日志,特别是在批量文件操作中,记录错误信息尤为重要。

  1. 使用 logging 模块记录日志
    logging 模块是 Python 提供的标准日志记录工具。我们可以将日志信息记录到控制台、文件或其他目的地。基本用法如下:
import logging

# 配置日志记录器
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

# 记录信息
logging.debug(' 这是一条调试信息 ')
logging.info(' 这是一条普通信息 ')
logging.warning(' 这是一条警告信息 ')
logging.error(' 这是一条错误信息 ')
logging.critical(' 这是一条严重错误信息 ')
  • debug():详细信息,通常用于开发和调试。
  • info():常规信息,用于显示程序的进度或状态。
  • warning():警告信息,表示程序运行可能出现问题。
  • error():错误信息,表示发生了错误,但程序能够继续运行。
  • critical():严重错误信息,表示发生了无法恢复的错误,程序无法继续运行。
  1. 将日志输出到文件
    默认情况下,日志会输出到控制台。我们可以通过配置将日志记录到文件中:
import logging

# 配置日志记录到文件
logging.basicConfig(filename='app.log', level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')

# 记录日志
logging.info(' 日志记录到文件中 ')

这样,所有日志信息将被写入 app.log 文件中,便于后续查看和分析。

  1. 记录错误信息到日志
    在处理文件时,程序很容易出现错误。通过 try-except 语句结合 logging,我们可以在出现异常时记录错误信息:
import logging

# 配置日志
logging.basicConfig(filename='error_log.txt', level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s')

try:
    with open('non_existent_file.txt', 'r') as f:
        content = f.read()
except Exception as e:
    logging.error(f' 错误发生:{e}')

如果文件 non_existent_file.txt 不存在,将记录错误信息到 error_log.txt 文件中。

  1. 记录文件操作的日志
    在批量处理文件时,记录每个文件的处理状态(如成功、失败、跳过等)非常重要。我们可以结合 logging 模块和文件操作来实现日志记录。
import logging
import os

# 配置日志
logging.basicConfig(filename='file_operations.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

def process_files(folder_path):
    files = os.listdir(folder_path)
    for filename in files:
        try:
            file_path = os.path.join(folder_path, filename)
            # 假设我们在这里对文件进行某种处理
            if filename.endswith(".txt"):
                # 处理文件
                logging.info(f" 处理成功:{file_path}")
            else:
                logging.warning(f" 跳过文件(不是文本文件):{file_path}")
        except Exception as e:
            logging.error(f" 处理文件 {filename} 时出错:{e}")

# 执行文件处理
process_files("./files_to_process")

此代码会记录每个文件的处理结果,如果遇到错误,会记录错误信息。如果文件不是 .txt 格式,则跳过并记录警告信息。

  1. 设置日志级别与日志轮转
    日志的级别控制了哪些日志信息会被记录。如果你只关心错误信息,可以设置日志级别为 logging.ERROR。此外,日志文件可能会变得很大,因此需要进行日志轮转。
import logging
from logging.handlers import RotatingFileHandler

# 配置日志轮转
handler = RotatingFileHandler('app.log', maxBytes=2000, backupCount=5)
logging.basicConfig(handlers=[handler], level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')

logging.info(' 这是一个日志轮转示例 ')

在此示例中,当 app.log 文件超过 2000 字节时,日志会自动轮转,最多保留 5 个备份文件。

总结:
logging 模块使得程序能够高效地记录日志信息,尤其在文件处理、数据处理等任务中非常有用。通过配置日志级别、输出格式以及日志轮转,我们可以有效地管理程序的日志。通过记录日志,我们能够追踪程序的运行状态、错误和异常,便于后续调试和维护。

练习与思考:

  1. 修改 process_files() 函数,记录每个文件的处理时间。
  2. 在文件处理过程中,使用 logging 记录文件的读取内容(只记录前 100 个字符)。
  3. 实现一个程序,使用日志记录文件的上传、下载、删除等操作,并根据操作类型设置不同的日志级别。
正文完
 0
评论(没有评论)