Put the final touches on something
喝了这碗,还有一碗,就该上道了
运行系统:macOS Sonoma 14.6.1
Python编译器:PyCharm 2024.1.4 (Community Edition)
Python版本:3.12
往期链接:
1-5 | 6-10 | 11-20 | 21-30 | 31-40 | 41-50 |
---|
51-60:函数 | 61-70:类 | 71-80:编程范式及设计模式 |
---|
81-90:Python编码规范 | 91-100:Python自带常用模块-1 |
---|
101-105:Python自带模块-2 | 106-110:Python自带模块-3 |
---|
111-115:Python常用第三方包-频繁使用 | 116-120:Python常用第三方包-深度学习 |
---|
121-125:Python常用第三方包-爬取数据 | 126-130:Python常用第三方包-为了乐趣 |
---|
本文只介绍每个包主要做什么及一些比较经典的示例。对于包的进一步学习,推荐参考对应包的官方文档。
131 python-docx - 创建和修改文档的库
python-docx版本1.1.2,官方文档
python-docx 是一个用于创建和修改 Microsoft Word 2007 及以上版本(.docx 格式)文档的 Python 库。它允许用户以编程方式生成复杂的文档,支持文本、样式、图像、表格等多种内容。
基本功能
- 创建新文档。
- 读取和修改现有文档。
- 添加段落、标题、列表、表格、图像等。
- 设置文本格式(如加粗、斜体、字体大小等)。
- 导出文档为 .docx 格式。
主要类和方法
- Document:主类,用于创建和操作文档。
(1) add_paragraph(text): 添加段落。
(2) add_heading(text, level): 添加标题。
(3)add_table(rows, cols): 添加表格。
(4)add_picture(image_path): 添加图片。
(5)save(file_path): 保存文档。 - Paragraph:代表文档中的段落。
- Run:代表段落中的文本块,可以设置不同的样式。
- Table:代表文档中的表格。
示例
from docx import Document
from docx.shared import Inches
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
# 创建文档
doc = Document()
# 添加标题
doc.add_heading('项目报告', level=1)
# 添加作者和日期
doc.add_paragraph('作者:张三')
doc.add_paragraph('日期:2024年9月12日')
# 添加简介段落
doc.add_heading('简介', level=2)
intro = doc.add_paragraph(
'本项目旨在开发一个用于管理和跟踪项目的应用程序。'
'我们的目标是提高团队的协作效率和项目管理能力。'
)
# 添加有序列表
doc.add_heading('项目目标', level=2)
goals = doc.add_paragraph('1. 提升团队协作能力', style='ListNumber')
goals.add_run('\n2. 提高项目管理效率').bold = True
goals.add_run('\n3. 实现任务的可视化跟踪')
# 添加无序列表
doc.add_heading('关键功能', level=2)
doc.add_paragraph('• 任务分配', style='ListBullet')
doc.add_paragraph('• 进度跟踪', style='ListBullet')
doc.add_paragraph('• 报告生成', style='ListBullet')
# 添加表格
doc.add_heading('项目时间表', level=2)
table = doc.add_table(rows=1, cols=4)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '阶段'
hdr_cells[1].text = '开始日期'
hdr_cells[2].text = '结束日期'
hdr_cells[3].text = '责任人'
# 添加数据到表格
data = [
('需求分析', '2024-01-01', '2024-01-15', 'Alice'),
('设计阶段', '2024-01-16', '2024-02-01', 'Bob'),
('开发阶段', '2024-02-02', '2024-04-01', 'Charlie'),
('测试阶段', '2024-04-02', '2024-05-01', 'David'),
]
for stage, start, end, person in data:
row_cells = table.add_row().cells
row_cells[0].text = stage
row_cells[1].text = start
row_cells[2].text = end
row_cells[3].text = person
# 设置表格样式
for row in table.rows:
for cell in row.cells:
cell.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
# 添加图片
doc.add_heading('项目示意图', level=2)
doc.add_picture('example.png', width=Inches(5)) # 确保该图片文件存在
# 添加总结段落
doc.add_heading('总结', level=2)
doc.add_paragraph(
'通过本项目的实施,我们期望能够显著提高团队的协作效率和项目管理能力。'
)
# 保存文档
doc.save('project_report.docx')
132 NetworkX - 网络分析和图论工具
NetworkX版本3.3,官方文档
NetworkX 是一个用于创建、操作和研究复杂网络的 Python 库。它提供了丰富的功能来处理图(图论中的数学结构)和网络,包括图的生成、分析、可视化等。主要模块:
- 图的创建与操作
(1)创建无向图、有向图和权重图。
(2)添加和删除节点和边。 - 图的属性
(1)节点和边的属性可以通过字典形式存储。
(2)支持多种图类型,如简单图、重图、带权图等。 - 图的分析
提供多种算法,如最短路径算法、连通性、中心性、聚类系数等。 - 图的可视化
使用 Matplotlib 或其他库进行图的可视化。 - 图的生成
提供多种图生成模型,如随机图、巴拉巴西-阿尔伯特模型等。
示例1: 小世界网络
import networkx as nx
import matplotlib.pyplot as plt
# 1. 创建一个 Watts-Strogatz 小世界网络
n = 100 # 节点数
k = 6 # 每个节点连接的邻居数
p = 0.1 # 重连概率
G = nx.watts_strogatz_graph(n, k, p)
# 2. 计算网络指标
degree_centrality = nx.degree_centrality(G)
# 3. 可视化网络
plt.figure(figsize=(12, 10))
# 使用 spring 布局
pos = nx.spring_layout(G, seed=42)
# 根据中心性设置节点大小和颜色
node_sizes = [v * 1000 for v in degree_centrality.values()]
node_colors = [degree_centrality[node] for node in G.nodes()]
# 绘制边
nx.draw_networkx_edges(G, pos, alpha=0.5, edge_color='gray')
# 绘制节点
nodes = nx.draw_networkx_nodes(G, pos, node_size=node_sizes, node_color=node_colors, cmap=plt.cm.viridis)
# 添加 colorbar
sm = plt.cm.ScalarMappable(cmap=plt.cm.viridis, norm=plt.Normalize(vmin=min(node_colors), vmax=max(node_colors)))
sm.set_array([]) # 必须设置数组
cbar = plt.colorbar(sm, ax=plt.gca(), label='Degree Centrality')
# 添加标签
nx.draw_networkx_labels(G, pos, font_size=8)
# 设置标题
plt.title('Watts-Strogatz Small-World Network Visualization', fontsize=16)
plt.axis('off') # 关闭坐标轴
plt.show()
示例2:社交网络分析
import networkx as nx
import matplotlib.pyplot as plt
# 1. 创建一个社交网络
G = nx.Graph()
# 添加节点(用户)
users = ['Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank', 'Grace', 'Heidi', 'Ivan', 'Judy']
G.add_nodes_from(users)
# 添加边(朋友关系)
edges = [
('Alice', 'Bob'),
('Alice', 'Charlie'),
('Bob', 'David'),
('Charlie', 'David'),
('Charlie', 'Eve'),
('David', 'Frank'),
('Eve', 'Grace'),
('Frank', 'Grace'),
('Grace', 'Heidi'),
('Heidi', 'Ivan'),
('Judy', 'Alice'),
('Judy', 'Bob'),
]
G.add_edges_from(edges)
# 2. 计算网络指标
degree_centrality = nx.degree_centrality(G)
# 3. 可视化网络
plt.figure(figsize=(10, 8))
# 使用 spring 布局
pos = nx.spring_layout(G, seed=42)
# 根据中心性设置节点大小和颜色
node_sizes = [v * 1000 for v in degree_centrality.values()]
node_colors = [degree_centrality[node] for node in G.nodes()]
# 绘制边
nx.draw_networkx_edges(G, pos, alpha=0.5, edge_color='gray')
# 绘制节点
nodes = nx.draw_networkx_nodes(G, pos, node_size=node_sizes, node_color=node_colors, cmap=plt.cm.viridis)
# 添加 colorbar
sm = plt.cm.ScalarMappable(cmap=plt.cm.viridis, norm=plt.Normalize(vmin=min(node_colors), vmax=max(node_colors)))
sm.set_array([]) # 必须设置数组
cbar = plt.colorbar(sm, ax=plt.gca(), label='Degree Centrality')
# 添加标签
nx.draw_networkx_labels(G, pos, font_size=10)
# 标注最重要的节点
top_nodes = sorted(degree_centrality.items(), key=lambda x: x[