【Python百宝箱】优化Python开发体验:日志记录、错误监控与高级调试

本文主要是介绍【Python百宝箱】优化Python开发体验:日志记录、错误监控与高级调试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

标题:“Python开发者的调试与性能优化大全”

前言

在软件开发的旅程中,调试和性能优化是每位开发者都需要掌握的关键技能。Python提供了丰富的工具和库,以应对开发中的各种挑战。本文将深入探讨logginglogurusentrypdbpy-spydebugpy等库,为Python开发者提供全面的调试、日志记录和性能优化指南。

【Python百宝箱】代码之外的艺术:精通命令行参数和日志记录在Python中的妙用

欢迎订阅专栏:Python库百宝箱:解锁编程的神奇世界

文章目录

      • 标题:**"Python开发者的调试与性能优化大全"**
      • 前言
      • 1. logging库
        • 1.1 日志记录的基础知识
        • 1.2 配置和日志级别
        • 1.3 高级日志记录技巧
        • 1.4 使用字典配置Logging
        • 1.5 使用Filter进行更复杂的日志过滤
        • 1.6 使用QueueHandler进行异步日志处理
      • 2. loguru库
        • 2.1 Loguru简介
        • 2.2 简化的日志记录语法
        • 2.3 自定义格式和输出目标
        • 2.4 基于日志记录的条件触发
        • 2.5 动态修改日志记录格式
        • 2.6 将日志输出到多个目标
      • 3. sentry库
        • 3.1 Sentry概述
        • 3.2 整合Sentry进行错误监控
        • 3.3 错误追踪和报告
        • 3.4 自定义Sentry事件处理
        • 3.5 Sentry上下文信息
        • 3.6 Sentry事件的重试和忽略
        • 3.7 Sentry环境集成
      • 4. pdb库
        • 4.1 使用Python调试器(pdb)
        • 4.2 设置断点和追踪执行
        • 4.3 调试技巧和命令
        • 4.4 条件断点
        • 4.5 运行时修改变量值
        • 4.6 单步执行和查看变量值
        • 4.7 脚本中插入多个断点
      • 5. py-spy库
        • 5.1 使用py-spy进行性能分析
        • 5.2 CPU性能分析
        • 5.3 分析运行中的Python程序
        • 5.4 采样间隔和持续监测
        • 5.5 使用py-spy记录性能数据
        • 5.6 绘制火焰图
      • 6. debugpy库
        • 6.1 debugpy简介
        • 6.2 远程调试和代码跟踪
        • 6.3 高级调试功能
          • 6.3.1 条件断点
          • 6.3.2 变量查看
          • 6.3.3 代码跟踪
          • 6.3.4 中断运行中的程序
          • 6.3.5 远程调试
          • 6.3.6 异步代码调试
          • 6.3.7 多进程调试
      • 总结

1. logging库

1.1 日志记录的基础知识

日志在软件开发中扮演着重要的角色,用于记录程序运行时的关键信息,方便调试和错误排查。Python内置的logging库提供了强大而灵活的日志记录工具。

import logging# 获取Logger对象
logger = logging.getLogger(__name__)# 不同级别的日志记录
logger.debug("This is a debug message")
logger.info("This is an info message")
logger.warning("This is a warning message")
logger.error("This is an error message")
logger.critical("This is a critical message")
1.2 配置和日志级别

logging库允许我们配置日志记录的格式、输出位置等信息,同时设置日志的级别,只记录达到指定级别的信息。

import logging# 配置日志
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')# 获取Logger对象
logger = logging.getLogger(__name__)# 不同级别的日志记录
logger.debug("This is a debug message")
logger.info("This is an info message")
logger.warning("This is a warning message")
logger.error("This is an error message")
logger.critical("This is a critical message")
1.3 高级日志记录技巧
import logging# 配置日志,输出到文件
logging.basicConfig(filename='app.log', level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')# 获取Logger对象
logger = logging.getLogger(__name__)# 添加日志文件回滚
from   logging.handlers import RotatingFileHandlerhandler = RotatingFileHandler('app.log', maxBytes=100000, backupCount=5)
logger.addHandler(handler)# 添加自定义过滤器
class CustomFilter(logging.Filter):def filter(self, record):return record.levelno == logging.WARNINGlogger.addFilter(CustomFilter())# 不同级别的日志记录
logger.debug("This is a debug message")
logger.info("This is an info message")
logger.warning("This is a warning message")
logger.error("This is an error message")
logger.critical("This is a critical message")
1.4 使用字典配置Logging

除了之前介绍的基本配置方式外,logging库还支持使用字典进行配置,使配置更加灵活。这种方式允许将配置存储在一个字典中,然后传递给dictConfig方法进行配置。

import logging
from logging.config import dictConfig# 配置日志,使用字典配置
log_config = {'version': 1,'handlers': {'console': {'class': 'logging.StreamHandler','level': 'DEBUG','formatter': 'standard'},'file': {'class': 'logging.FileHandler','filename': 'app.log','level': 'DEBUG','formatter': 'detailed','mode': 'w'}},'formatters': {'standard': {'format': '%(asctime)s - %(levelname)s - %(message)s'},'detailed': {'format': '%(asctime)s - %(levelname)s - %(module)s - %(message)s'}},'root': {'level': 'DEBUG','handlers': ['console', 'file']}
}# 应用配置
dictConfig(log_config)# 获取Logger对象
logger = logging.getLogger(__name__)# 不同级别的日志记录
logger.debug("This is a debug message")
logger.info("This is an info message")
logger.warning("This is a warning message")
logger.error("This is an error message")
logger.critical("This is a critical message")
1.5 使用Filter进行更复杂的日志过滤

Filterlogging库中强大的工具之一,通过自定义Filter类,可以实现更灵活、更复杂的日志过滤。下面的例子展示了如何使用自定义的Filter类来过滤出包含特定关键字的日志记录。

import logging# 获取Logger对象
logger = logging.getLogger(__name__)# 添加自定义Filter
class KeywordFilter(logging.Filter):def __init__(self, keyword):self.keyword = keyworddef filter(self, record):return self.keyword in record.getMessage()# 应用Filter
logger.addFilter(KeywordFilter('important'))# 不同级别的日志记录
logger.debug("This is a debug message")
logger.info("This is an important info message")
logger.warning("This is a warning message")
logger.error("This is an error message")
logger.critical("This is a critical message")

在这个例子中,我们定义了一个KeywordFilter类,它接受一个关键字作为参数,然后在filter方法中检查该关键字是否出现在日志消息中。通过使用这个自定义的Filter,我们可以只保留包含特定关键字的日志记录。

1.6 使用QueueHandler进行异步日志处理

当需要在多线程或多进程环境中使用logging库时,可以考虑使用QueueHandler来实现异步的日志处理。QueueHandler允许将日志消息放入队列中,然后由单独的线程或进程处理这些消息,以避免阻塞主程序。

import logging
import queue
import threading# 创建队列
log_queue = queue.Queue()# 创建QueueHandler
queue_handler = logging.handlers.QueueHandler(log_queue)# 获取Logger对象
logger = logging.getLogger(__name__)# 添加QueueHandler
logger.addHandler(queue_handler)# 在另一个线程中处理日志消息
def log_consumer():while True:record = log_queue.get()if record is None:breaklogger.handle(record)# 启动消费者线程
consumer_thread = threading.Thread(target=log_consumer)
consumer_thread.start()# 不同级别的日志记录
logger.debug("This is a debug message")
logger.info("This is an info message")
logger.warning("This is a warning message")
logger.error("This is an error message")
logger.critical("This is a critical message")# 停止消费者线程
log_queue.put(None)
consumer_thread.join()

在这个例子中,我们创建了一个QueueHandler并将其添加到Logger中。然后,启动了一个消费者线程,它从队列中获取日志消息并由Logger处理。这种方式使得日志处理可以在后台进行,不会阻塞主程序的执行。

2. loguru库

2.1 Loguru简介

loguru库是一个简单而强大的日志记录库,提供了直观的API和丰富的功能。

2.2 简化的日志记录语法
from loguru import logger# 基本用法
logger.info("This is an info message")
logger.warning("This is a warning message")
2.3 自定义格式和输出目标
from loguru import logger# 自定义输出格式
logger.add("file.log", format="{time} - {level} - {message}", rotation="1 day", level="INFO")# 不同级别的日志记录
logger.info("This is an info message")
logger.warning("This is a warning message")
2.4 基于日志记录的条件触发

loguru提供了一种基于日志记录内容的条件触发机制,可以在满足特定条件时执行相应的操作。

from loguru import logger# 条件触发,记录包含关键字的日志并执行操作
logger.add(lambda record: "important" in record["message"], level="INFO", colorize=True)# 不同级别的日志记录
logger.info("This is an info message")
logger.info("This is an important info message")
logger.warning("This is a warning message")

在上述例子中,我们使用add方法添加了一个条件触发器,当日志中包含关键字"important"时,触发器将设置日志级别为INFO,并应用颜色。

2.5 动态修改日志记录格式

loguru允许在运行时动态修改日志记录的格式,使得我们可以根据需要实时调整日志格式。

from loguru import logger# 初始输出格式
logger.info("This is the default format")# 动态修改输出格式
logger.remove()
logger.add("file.log", format="{time} - {level} - {message}", rotation="1 day", level="INFO")
logger.info("This message has a different format and is saved to a file")

在这个例子中,我们首先使用默认格式记录了一条日志,然后通过remove方法删除了之前的输出目标,再使用add方法动态添加了一个新的输出目标,实现了动态修改日志记录格式。

2.6 将日志输出到多个目标

loguru支持将日志输出到多个目标,比如同时输出到控制台和文件。

from loguru import logger# 输出到控制台和文件
logger.add("file.log", format="{time} - {level} - {message}", rotation="1 day", level="INFO")
logger.add(lambda record: record["level"].name == "WARNING", colorize=True)# 不同级别的日志记录
logger.info("This is an info message")
logger.warning("This is a warning message")

在这个例子中,我们通过add方法添加了两个输出目标,一个输出到文件,一个通过条件触发器将WARNING级别的日志输出到控制台并添加颜色。

3. sentry库

3.1 Sentry概述

Sentry是一个用于实时错误监控和追踪的服务,帮助开发者快速发现并解决问题。

3.2 整合Sentry进行错误监控
import sentry_sdk# 安装Sentry SDK
# pip install sentry-sdk# 初始化Sentry
sentry_sdk.init("<your-sentry-dsn>")try:# 产生一个异常1 / 0
except Exception as e:# 捕获异常并发送到Sentrysentry_sdk.capture_exception(e)
3.3 错误追踪和报告
import sentry_sdk# 初始化Sentry
sentry_sdk.init("<your-sentry-dsn>")try :# 产生一个异常1 / 0
except Exception as e:# 捕获异常并发送到Sentrysentry_sdk.capture_exception(e)
3.4 自定义Sentry事件处理

除了基本的错误捕获外,sentry_sdk还提供了自定义事件处理的功能,允许开发者更灵活地处理并发送事件。

import sentry_sdk
from sentry_sdk import capture_message# 初始化Sentry
sentry_sdk.init("<your-sentry-dsn>")# 自定义事件处理函数
def my_event_processor(event, hint):# 在这里添加自定义处理逻辑event["user"] = {"id": "123"}return event# 添加自定义事件处理
sentry_sdk.add_event_processor(my_event_processor)# 手动捕获并发送事件
try:1 / 0
except Exception as e:capture_message("An error occurred", hint={"exc_info": (type(e), e, e.__traceback__)})

在这个例子中,我们定义了一个名为my_event_processor的自定义事件处理函数,并通过add_event_processor方法添加。这样,当手动捕获并发送事件时,该处理函数将被调用,我们可以在其中添加自定义的事件处理逻辑。

3.5 Sentry上下文信息

Sentry允许开发者添加上下文信息,以便更好地理解和排查问题。这些上下文信息可以是用户信息、环境变量等。

import sentry_sdk
from sentry_sdk import push_scope# 初始化Sentry
sentry_sdk.init("<your-sentry-dsn>")# 添加上下文信息
with push_scope() as scope:scope.user = {"id": "123", "username": "john_doe"}scope.set_tag("environment", "production")# 手动捕获并发送事件
try:1 / 0
except Exception as e:sentry_sdk.capture_exception(e)

在这个例子中,我们使用push_scope方法创建了一个上下文范围,然后在范围内设置了用户信息和环境标签。这些上下文信息将与后续手动捕获并发送的事件关联起来,提供更全面的信息。

3.6 Sentry事件的重试和忽略

在某些情况下,当事件发送失败时,Sentry提供了重试机制,确保事件最终能够被成功发送。同时,我们也可以配置忽略某些特定类型的事件,以防止不必要的报警。

import sentry_sdk# 初始化Sentry,配置事件重试和忽略特定类型的事件
sentry_sdk.init("<your-sentry-dsn>", send_default_pii=True, max_breadcrumbs=50, before_send=before_send_func)# 手动捕获并发送事件
try:1 / 0
except Exception as e:sentry_sdk.capture_exception(e)

在这个例子中,我们通过send_default_pii开启了默认的个人身份信息(PII)发送,通过max_breadcrumbs设置了最大的面包屑数量,通过before_send设置了在发送事件之前执行的自定义函数。before_send_func函数可以根据需求进行事件的修改、过滤或者忽略。

这些配置选项使得我们能够更加灵活地控制Sentry的行为,确保事件能够被有效地处理。

3.7 Sentry环境集成

Sentry可以集成到不同的环境中,以更好地适应不同的应用场景。以下是一些环境集成的示例。

import sentry_sdk
from sentry_sdk.integrations.redis import RedisIntegration
from sentry_sdk.integrations.celery import CeleryIntegration# 初始化Sentry,集成到Redis和Celery
sentry_sdk.init("<your-sentry-dsn>",integrations=[RedisIntegration(), CeleryIntegration()]
)# 手动捕获并发送事件
try:1 / 0
except Exception as e:sentry_sdk.capture_exception(e)

在这个例子中,我们通过integrations参数集成了RedisCelery。这样,Sentry将能够更好地理解和处理与这两个组件相关的事件。

通过对Sentry库的深入了解,我们可以更灵活地配置和使用它,以满足复杂应用场景中的需求。

4. pdb库

4.1 使用Python调试器(pdb)
# 脚本中插入断点
import pdbdef example_function():x = 1y = 0result = x / yreturn resultpdb.set_trace()
result = example_function()
print(result)
4.2 设置断点和追踪执行
# 脚本中插入断点
import pdbdef example_function():x = 1y = 0result = x / yreturn resultpdb.set_trace()
result = example_function()
print(result)
4.3 调试技巧和命令
# 脚本中插入断点
import pdbdef example_function():x = 1y = 0result = x / yreturn resultpdb.set_trace()
result = example_function()
print(result)
4.4 条件断点

pdb允许设置条件断点,即只在满足特定条件时才触发断点。

# 条件断点
import pdbdef example_function():x = 1y = 0result = x / yreturn result# 设置条件断点,仅当y非零时触发断点
pdb.set_trace() if y != 0 else None
result = example_function()
print(result)

在这个例子中,我们使用了条件表达式,只有当y非零时才触发断点。这对于在特定条件下进行调试非常有用。

4.5 运行时修改变量值

pdb允许在断点处运行时修改变量的值,以测试不同的场景。

# 运行时修改变量值
import pdbdef example_function():x = 1y = 0result = x / yreturn resultpdb.set_trace()
y = 2  # 在断点处运行时修改变量值
result = example_function()
print(result)

在这个例子中,在断点处我们修改了变量y的值,使得程序在后续执行中产生不同的结果。这样可以帮助我们快速测试不同的输入。

4.6 单步执行和查看变量值

pdb支持单步执行代码,以及查看当前变量的值。

# 单步执行和查看变量值
import pdbdef example_function():x = 1y = 0result = x / yreturn resultpdb.set_trace()
result = example_function()
print(result)

在断点处,使用n命令可以单步执行代码,使用p variable可以查看特定变量的值。这对于逐行调试和变量跟踪非常有帮助。

4.7 脚本中插入多个断点

在脚本中,我们可以插入多个断点,以在不同的代码位置进行调试。

# 脚本中插入多个断点
import pdbdef example_function():x = 1pdb.set_trace()  # 第一个断点y = 0result = x / ypdb.set_trace()  # 第二个断点return resultpdb.set_trace()  # 第三个断点
result = example_function()
print(result)

在这个例子中,我们在脚本中插入了三个断点,分别位于不同的代码位置。这样可以更灵活地进行调试,观察不同阶段的程序状态。

5. py-spy库

5.1 使用py-spy进行性能分析
# 安装py-spy
# pip install py-spy# 查看程序性能
py-spy top
5.2 CPU性能分析
# 生成CPU火焰图
py-spy top --flame profile.svg
5.3 分析运行中的Python程序
# 连接到运行中的Python进程
py-spy top -p <pid>
5.4 采样间隔和持续监测

py-spy允许设置采样间隔和持续监测的时间,以更灵活地适应不同的性能分析需求。

# 设置采样间隔和持续监测时间
py-spy top --interval 100ms --duration 30

在这个例子中,我们通过--interval参数设置了采样间隔为100毫秒,通过--duration参数设置了持续监测时间为30秒。这样可以在较短的时间内获取更多的性能数据。

5.5 使用py-spy记录性能数据

py-spy可以将性能数据记录到文件中,以便后续分析和可视化。

# 记录性能数据到文件
py-spy top --output profile.json

通过将性能数据输出到文件,我们可以在离线状态下进行更深入的分析和探索。

5.6 绘制火焰图

火焰图是一种直观的性能分析可视化工具,py-spy支持生成火焰图。

# 生成火焰图
py-spy top --flame profile.svg

通过生成火焰图,我们可以清晰地了解程序中各个函数的调用关系和执行时间,帮助快速定位性能瓶颈。

6. debugpy库

6.1 debugpy简介

debugpy库提供了远程调试和代码跟踪的功能,方便开发者在生产环境中调试程序。

6.2 远程调试和代码跟踪
# 安装debugpy
# pip install debugpyimport debugpy# 启用远程调试
debugpy.listen(("0.0.0.0", 5678))
6.3 高级调试功能

在开发过程中,可能需要更进一步的调试工具和技术来解决复杂的问题。debugpy提供了一些高级调试功能,使得在开发和维护代码时更加便捷。

6.3.1 条件断点

debugpy中设置条件断点,可以根据指定的条件在程序执行到相应位置时触发断点。

# 安装debugpy
# pip install debugpyimport debugpy# 启用远程调试
debugpy.listen(("0.0.0.0", 5678))# 你的Python代码
for i in range(10):if i == 5:debugpy.breakpoint()  # 设置条件断点print(i)

在上述例子中,当i的值等于5时,将触发条件断点。

6.3.2 变量查看

使用VS Code等支持debugpy的工具,可以方便地查看代码执行过程中变量的值。

# 安装debugpy
# pip install debugpyimport debugpy# 启用远程调试
debugpy.listen(("0.0.0.0", 5678))# 你的Python代码
x = 10
y = 5
result = x / y# 在VS Code中查看变量值
# 可以在这里设置断点,然后在调试器中查看变量值
6.3.3 代码跟踪

trace_function_callsdebugpy的一个功能,它可以追踪函数的调用过程,有助于理解代码的执行流程。

# 安装debugpy
# pip install debugpyimport debugpy# 启用远程调试
debugpy.listen(("0.0.0.0", 5678))# 启用代码跟踪
debugpy.trace_function_calls(True)# 你的Python代码
# ...

在上述例子中,启用了代码跟踪功能后,可以在控制台中看到函数的调用信息,这对于理解程序的执行流程非常有帮助。

这些高级调试功能可以在复杂的代码中提供更深入的调试支持,使得开发人员更容易定位和解决问题。

6.3.4 中断运行中的程序

debugpy允许在程序运行时中断执行,以便进行交互式的调试。

# 安装debugpy
# pip install debugpyimport debugpy# 启用远程调试
debugpy.listen(("0.0.0.0", 5678))# 在程序中断执行
debugpy.breakpoint()
# 你的Python代码
# ...

在这个例子中,通过在代码中插入debugpy.breakpoint(),可以在程序执行到该位置时中断执行,进入调试状态,从而进行交互式的调试。

6.3.5 远程调试

debugpy支持远程调试,使得可以在远程服务器上调试本地代码。

# 安装debugpy
# pip install debugpyimport debugpy# 启用远程调试,指定主机和端口
debugpy.listen(("0.0.0.0", 5678))

通过在代码中插入debugpy.listen并指定主机和端口,可以在远程服务器上启动debugpy调试服务器,然后通过本地调试工具连接到远程服务器进行调试。

6.3.6 异步代码调试

debugpy对异步代码提供了良好的支持,可以方便地进行异步程序的调试。

# 安装debugpy
# pip install debugpyimport debugpy# 启用远程调试
debugpy.listen(("0.0.0.0", 5678))# 在异步代码中插入断点
async def async_example():debugpy.breakpoint()# 异步代码# ...# 你的Python代码
# ...

在这个例子中,通过在异步函数中插入debugpy.breakpoint(),可以在异步代码执行到该位置时中断执行,进行异步代码的调试。

6.3.7 多进程调试

debugpy还支持多进程调试,可以同时调试多个Python进程。

# 安装debugpy
# pip install debugpyimport debugpy# 启用远程调试
debugpy.listen(("0.0.0.0", 5678))# 在多进程代码中插入断点
from   multiprocessing import Processdef process_example():debugpy.breakpoint()# 多进程代码# ...# 启动多进程
process = Process(target=process_example)
process.start()
process.join()# 你的Python代码
# ...

通过在多进程代码中插入debugpy.breakpoint(),可以在每个进程执行到该位置时中断执行,方便进行多进程调试。

这些高级调试功能使得debugpy成为一个强大的调试工具,适用于各种复杂的调试场景。

总结

通过学习本文介绍的各种调试和性能优化工具,Python开发者将能够更轻松地管理和维护他们的代码。正确配置和使用logging库,采用现代的loguru库简化日志记录,整合Sentry进行实时错误监控,以及通过pdbdebugpypy-spy实现高级的调试和性能分析,都将帮助开发者更快速、更准确地发现和解决问题,提高代码质量。

这篇关于【Python百宝箱】优化Python开发体验:日志记录、错误监控与高级调试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/523010

相关文章

python安装whl包并解决依赖关系的实现

《python安装whl包并解决依赖关系的实现》本文主要介绍了python安装whl包并解决依赖关系的实现,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录一、什么是whl文件?二、我们为什么需要使用whl文件来安装python库?三、我们应该去哪儿下

Python脚本实现图片文件批量命名

《Python脚本实现图片文件批量命名》这篇文章主要为大家详细介绍了一个用python第三方库pillow写的批量处理图片命名的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言源码批量处理图片尺寸脚本源码GUI界面源码打包成.exe可执行文件前言本文介绍一个用python第三方库pi

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

Python自动化Office文档处理全攻略

《Python自动化Office文档处理全攻略》在日常办公中,处理Word、Excel和PDF等Office文档是再常见不过的任务,手动操作这些文档不仅耗时耗力,还容易出错,幸运的是,Python提供... 目录一、自动化处理Word文档1. 安装python-docx库2. 读取Word文档内容3. 修改

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安

Python重命名文件并移动到对应文件夹

《Python重命名文件并移动到对应文件夹》在日常的文件管理和处理过程中,我们可能会遇到需要将文件整理到不同文件夹中的需求,下面我们就来看看如何使用Python实现重命名文件并移动到对应文件夹吧... 目录检查并删除空文件夹1. 基本需求2. 实现代码解析3. 代码解释4. 代码执行结果5. 总结方法补充在

Python自动化办公之合并多个Excel

《Python自动化办公之合并多个Excel》在日常的办公自动化工作中,尤其是处理大量数据时,合并多个Excel表格是一个常见且繁琐的任务,下面小编就来为大家介绍一下如何使用Python轻松实现合... 目录为什么选择 python 自动化目标使用 Python 合并多个 Excel 文件安装所需库示例代码

Python使用Pandas对比两列数据取最大值的五种方法

《Python使用Pandas对比两列数据取最大值的五种方法》本文主要介绍使用Pandas对比两列数据取最大值的五种方法,包括使用max方法、apply方法结合lambda函数、函数、clip方法、w... 目录引言一、使用max方法二、使用apply方法结合lambda函数三、使用np.maximum函数

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O