
作为Python开发经验的老手经常被问到:“除了pandas,你还会用哪些Python库?”今天就来分享日常工作中最依赖的8个Python库,它们解决了各种实际问题,让工作效率翻倍。
当数据量超过千万级,pandas开始力不从心时,polars就是我的救星。这个用Rust编写的库在性能上完胜pandas,特别是在处理大数据时。
为什么选择polars:
# 对比示例:读取1GB的CSV文件
importpandasaspd
importpolarsaspl
importtime
# pandas方式(耗时约45秒)
start = time.time()
df_pd = pd.read_csv('large_data.csv')
print(f"pandas耗时: {time.time()-start:.1f}秒")
# polars方式(耗时约8秒)
start = time.time()
df_pl = pl.read_csv('large_data.csv')
print(f"polars耗时: {time.time()-start:.1f}秒")适用场景:大数据处理、ETL管道、实时数据分析
Python自带的logging模块配置繁琐,loguru让我彻底摆脱了这种痛苦。一行代码就能开始记录日志,支持多种输出格式和级别。
核心优势:
from loguru import logger就能用fromloguruimportlogger
# 基本使用
logger.info("程序启动")
logger.warning("内存使用率超过80%")
logger.error("数据库连接失败")
# 输出到文件(自动轮转)
logger.add("app_{time}.log", rotation="500 MB") # 每500MB轮转
logger.add("error.log", level="ERROR") # 只记录错误日志适用场景:所有需要日志记录的项目,特别是快速原型开发
以前用argparse写命令行工具总是很痛苦,直到发现了typer。它基于Python的类型提示,让CLI开发变得简单而优雅。
为什么喜欢typer:
--help文档importtyper
app = typer.Typer()
@app.command()
defgreet(name: str, formal: bool = False):
"""向某人打招呼"""
ifformal:
typer.echo(f"尊敬的{name},您好!")
else:
typer.echo(f"嘿,{name}!")
@app.command()
defcalculate(
numbers: list[float],
operation: str = typer.Option("sum", help="操作类型: sum, avg, max")
):
"""计算一组数字"""
ifoperation == "sum":
result = sum(numbers)
elifoperation == "avg":
result = sum(numbers) /len(numbers)
typer.echo(f"结果: {result}")
if__name__ == "__main__":
app()使用方式:
# 自动生成的CLI
python my_cli.py greet Alice --formal
python my_cli.py calculate 1234--operation avg适用场景:开发命令行工具、自动化脚本、DevOps工具
在终端中显示漂亮的表格、进度条、语法高亮代码,rich让这一切变得简单。我经常用它来构建更友好的命令行界面。
常用功能:
fromrich.consoleimportConsole
fromrich.tableimportTable
fromrich.progressimporttrack
importtime
console = Console()
# 创建漂亮的表格
table = Table(title="用户统计")
table.add_column("用户名", style="cyan")
table.add_column("注册时间", style="green")
table.add_column("活跃度", style="yellow")
table.add_row("张三", "2023-01-15", "高")
table.add_row("李四", "2023-03-22", "中")
console.print(table)
# 进度条示例
foriintrack(range(100), description="处理中..."):
time.sleep(0.05) # 模拟耗时操作适用场景:命令行工具美化、数据分析结果展示、调试信息格式化
处理API请求、配置文件解析时,数据验证总是个头疼的问题。pydantic基于Python类型提示,提供了强大的数据验证功能。
核心价值:
frompydanticimportBaseModel, validator
fromdatetimeimportdatetime
fromtypingimportList
classUser(BaseModel):
id: int
name: str
email: str
created_at: datetime
tags: List[str] = []
@validator('email')
defemail_must_contain_at(cls, v):
if'@'notinv:
raiseValueError('邮箱格式不正确')
returnv
# 使用示例
user_data = {
"id": 1,
"name": "张三",
"email": "zhangsan@example.com",
"created_at": "2023-10-01 09:30:00"
}
user = User(**user_data) # 自动验证和转换
print(user.email) # zhangsan@example.com适用场景:API请求验证、配置文件解析、数据模型定义
虽然Django和Flask很流行,但当我需要构建高性能的API时,fastapi是我的首选。它基于Starlette和Pydantic,性能卓越且开发体验极佳。
选择fastapi的理由:
fromfastapiimportFastAPI
frompydanticimportBaseModel
app = FastAPI()
classItem(BaseModel):
name: str
price: float
is_offer: bool = False
@app.get("/")
defread_root():
return {"Hello": "World"}
@app.post("/items/")
defcreate_item(item: Item):
# 自动验证请求体
return {"item_name": item.name, "item_price": item.price}
# 运行后访问 http://localhost:8000/docs 查看自动生成的API文档适用场景:微服务开发、REST API、实时API
当需要并行处理数据时,joblib提供了最简单的方式。特别是它的Parallel和delayed组合,让我轻松实现并行计算。
使用场景:
fromjoblibimportParallel, delayed
importtime
defprocess_item(item_id):
"""模拟耗时操作"""
time.sleep(1)
returnf"处理完成: {item_id}"
# 串行处理(耗时约10秒)
results_serial = [process_item(i) foriinrange(10)]
# 并行处理(4核CPU,耗时约3秒)
results_parallel = Parallel(n_jobs=4)(
delayed(process_item)(i) foriinrange(10)
)适用场景:数据预处理、模型训练、批量文件处理
Python的datetime模块功能有限,pendulum提供了更人性化的时间处理方式。我特别喜欢它的时区支持和人性化时间差显示。
为什么选择pendulum:
importpendulum
# 创建时间对象
now = pendulum.now("Asia/Shanghai")
print(now) # 2023-10-01T14:30:00+08:00
# 人性化显示
two_hours_ago = now.subtract(hours=2)
print(two_hours_ago.diff_for_humans()) # 2小时前
# 时间范围
start = pendulum.datetime(2023, 1, 1)
end = pendulum.datetime(2023, 12, 31)
period = pendulum.period(start, end)
fordayinperiod.range('days'):
ifday.day_of_week == pendulum.SATURDAY:
print(f"周六: {day.to_date_string()}")适用场景:日志时间处理、日程安排、国际化应用
在实际项目中,这些库经常组合使用:
# 一个完整的数据处理流程示例
importpolarsaspl
fromloguruimportlogger
fromjoblibimportParallel, delayed
importpendulum
logger.add("data_pipeline.log")
defprocess_chunk(chunk_path):
"""处理数据块"""
logger.info(f"开始处理: {chunk_path}")
start_time = pendulum.now()
# 使用polars读取和处理数据
df = pl.read_parquet(chunk_path)
processed = df.group_by("category").agg([
pl.col("value").mean().alias("avg_value"),
pl.col("value").count().alias("count")
])
elapsed = pendulum.now() -start_time
logger.success(f"处理完成: {chunk_path}, 耗时: {elapsed.in_words()}")
returnprocessed
# 并行处理多个文件
chunk_files = ["data/chunk1.parquet", "data/chunk2.parquet", "data/chunk3.parquet"]
results = Parallel(n_jobs=3)(delayed(process_chunk)(f) forfinchunk_files)
# 合并结果
final_result = pl.concat(results)
logger.info(f"总共处理了 {final_result.height} 行数据")对于这些库,建议:
这些库从数据处理到Web开发,从命令行工具到系统监控。它们不仅仅是工具,更是提高开发效率的利器。
Python生态的魅力就在于有这么多优秀的开源项目。选择适合自己的工具,能让编程更轻松、更高效。
希望这个清单对你有所帮助!如果你也有私藏的Python神器,欢迎在评论区分享。
“无他,惟手熟尔”!有需要的用起来!
本文分享自 Nicholas与Pypi 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!