程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

Python编程利器:深入解析requests、pandas与logging的高级用法

hfteth 2025-03-03 18:44:31 技术文章 11 ℃

在Python的开发实践中,第三方库为我们提供了强大的功能支持。今天,我们将探讨requests库的高级用法、pandas库中的apply与向量化操作优化,以及logging模块的定制日志配置,帮助大家更高效地使用这些工具。

一、requests高级用法:会话保持、重试机制、流式下载

requests是Python中处理HTTP请求的常用库,它的一些高级特性可以让网络请求更加高效和灵活。

会话保持

通过requests.Session()可以创建一个会话对象,它会跨请求保持某些参数,例如cookies,直到会话被显式关闭。

 import requests
 
 with requests.Session() as session:
     session.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
     response = session.get("http://httpbin.org/cookies")
     print(response.text)  # 查看cookie信息

重试机制

可以使用
requests.adapters.HTTPAdapter
来实现请求的重试机制。

 from requests.adapters import HTTPAdapter
 from requests.packages.urllib3.util.retry import Retry
 
 retry_strategy = Retry(
     total=3,
     status_forcelist=[429, 500, 502, 503, 504],
     method_whitelist=["HEAD", "GET", "OPTIONS"]
 )
 adapter = HTTPAdapter(max_retries=retry_strategy)
 http = requests.Session()
 http.mount("https://", adapter)
 http.mount("http://", adapter)

流式下载

对于大文件,可以使用requests的流式下载功能,以节省内存。

 response = requests.get('https://example.com/largefile.zip', stream=True)
 with open('largefile.zip', 'wb') as f:
     for chunk in response.iter_content(chunk_size=8192):
         if chunk:
             f.write(chunk)

二、pandas的apply与vectorization优化:性能差异对比

pandas是Python数据分析的基石,合理使用apply和向量化操作可以显著提高代码性能。

使用apply

 import pandas as pd
 
 df = pd.DataFrame({'value': [1, 2, 3, 4]})
 df['squared'] = df['value'].apply(lambda x: x**2)

向量化操作

 df['squared'] = df['value'] ** 2

向量化操作通常比apply更快,因为它直接操作底层数据,而不需要Python层面的循环。

三、logging模块定制日志:多处理器、过滤器与日志格式配置

logging模块是Python的标准库,用于记录日志信息。

多处理器日志

 import logging
 from logging.handlers import QueueHandler, QueueListener
 import queue
 
 log_queue = queue.Queue(-1)  # 不限制队列大小
 queue_handler = QueueHandler(log_queue)
 listener = QueueListener(log_queue, *handlers)  # handlers是日志处理器列表
 listener.start()

过滤器

 class OnlyErrorFilter(logging.Filter):
     def filter(self, record):
         return record.levelno >= logging.ERROR
 
 logger.addFilter(OnlyErrorFilter())

日志格式配置

 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
 handler.setFormatter(formatter)

通过以上内容,我们了解了requests库的高级用法,pandas中的性能优化技巧,以及logging模块的定制日志配置。掌握这些高级特性,可以让我们的Python编程更加高效和强大。希望本文对大家有所帮助!

Tags:

最近发表
标签列表