当前位置:首页 > 技术 > 正文内容

Python正则表达式、pip包管理与openpyxl操作指南

访客 技术 2026年10月12日 1

正则表达式模块 (re) 核心用法

Python 的 re 模块提供了强大的正则表达式支持,用于字符串的匹配、搜索和替换。以下是几种常用的核心方法:

import re

# 1. findall:查找所有匹配项,返回包含所有结果的列表
text_data = "apple 123 banana 456 apple 789"
matches_list = re.findall(r'apple', text_data)
print(matches_list)  # 输出: ['apple', 'apple']

# 2. finditer:与 findall 类似,但返回一个迭代器,适合处理大文本以节省内存
matches_iter = re.finditer(r'\d+', text_data)
for match in matches_iter:
    print(match.group())  # 依次输出: 123, 456, 789

# 3. search:扫描整个字符串,返回第一个成功的匹配对象
search_result = re.search(r'\d+', text_data)
if search_result:
    print(search_result.group())  # 输出: 123

# 4. match:仅从字符串起始位置开始匹配,若开头不符合则返回 None
start_match = re.match(r'apple', text_data)
print(start_match.group() if start_match else "No match")  # 输出: apple

# 5. compile:预编译正则表达式对象,提高多次执行相同匹配时的效率
compiled_pattern = re.compile(r'apple')
print(compiled_pattern.findall("apple pie and apple juice"))  # 输出: ['apple', 'apple']

正则表达式进阶:分组与命名捕获

在复杂的匹配场景中,分组和命名捕获可以帮助我们精准提取目标子串。

# 普通分组与 findall 的优先级问题
raw_text = "2023-10-25 2023-11-30"
# 当存在捕获组时,findall 默认只返回组内的内容
print(re.findall(r'(\d{4})-(\d{2})-(\d{2})', raw_text)) 
# 输出: [('2023', '10', '25'), ('2023', '11', '30')]

# 使用非捕获组 (?:...) 取消分组优先级,返回完整匹配
print(re.findall(r'(?:\d{4})-(?:\d{2})-(?:\d{2})', raw_text)) 
# 输出: ['2023-10-25', '2023-11-30']

# search 中的分组提取
date_match = re.search(r'(\d{4})-(\d{2})-(\d{2})', raw_text)
print(date_match.group(0))  # 完整匹配: 2023-10-25
print(date_match.group(1))  # 第一个组: 2023

# 命名捕获组:为分组指定别名,提升代码可读性
named_match = re.search(r'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})', raw_text)
print(named_match.group('year'))   # 输出: 2023
print(named_match.group('month')) # 输出: 10

网络爬虫基础概念

  • 互联网的本质:全球计算机网络互联的集合,旨在实现数据与资源的共享。
  • 上网行为:客户端通过网络协议向服务器发起请求,获取并渲染资源的过程。
  • 网络爬虫:通过编写程序模拟浏览器行为,自动化地向目标服务器发送请求、获取响应数据,并从中提取有价值信息的脚本。理论上,浏览器能访问的公开数据,爬虫均可获取。

Python第三方库管理 (pip)

Python 生态拥有丰富的第三方库,使用 pip 工具可以轻松进行包管理。

常用 pip 命令

# 安装指定模块及版本
pip install requests==2.28.1

# 卸载模块
pip uninstall requests

# 查看当前 Python 版本
python --version

# 列出所有已安装的第三方包
pip list

# 查看特定包的详细信息
pip show requests

解决下载缓慢与常见报错

默认情况下,pip 从官方 PyPI 仓库下载,国内访问可能较慢。可以通过 -i 参数指定国内镜像源来加速:

pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple/

常见国内镜像源:

  • 清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/
  • 阿里云:http://mirrors.aliyun.com/pypi/simple/
  • 腾讯云:http://mirrors.cloud.tencent.com/pypi/simple

常见错误处理:

  • pip 版本过低:根据终端提示执行升级命令,如 python -m pip install --upgrade pip。
  • Read timed out:网络波动导致超时,建议重试或切换更稳定的网络/镜像源。
  • 永久配置镜像源:在用户目录下创建 pip 配置文件(Linux/Mac 为 ~/.pip/pip.conf,Windows 为 %APPDATA%\pip\pip.ini),写入 [global] 和 index-url 配置。

爬虫实战:数据抓取与正则提取

以下示例演示了如何使用 requests 获取网页内容,并结合 re 模块提取结构化数据。

import requests
import re

# 1. 发送网络请求获取网页源码 (此处以模拟的图书数据为例)
url = "http://example.com/books"
# response = requests.get(url)
# html_content = response.text

# 为避免频繁请求,这里使用本地模拟的 HTML 数据
html_content = """
<div class="book-item">
    <h3 class="title">Python编程从入门到实践</h3>
    <span class="author">Eric Matthes</span>
    <span class="price">89.00</span>
</div>
<div class="book-item">
    <h3 class="title">流畅的Python</h3>
    <span class="author">Luciano Ramalho</span>
    <span class="price">139.00</span>
</div>
"""

# 2. 编写正则表达式提取目标字段
titles = re.findall(r'<h3 class="title">(.*?)</h3>', html_content)
authors = re.findall(r'<span class="author">(.*?)</span>', html_content)
prices = re.findall(r'<span class="price">(.*?)</span>', html_content)

# 3. 整合数据并输出
for title, author, price in zip(titles, authors, prices):
    print(f"书名: {title} | 作者: {author} | 价格: ¥{price}")

Excel自动化处理 (openpyxl)

openpyxl 是 Python 中用于读写 Excel 2010 及以上版本(.xlsx)文件的主流库。对于旧版 .xls 文件,通常需要借助 xlrd 和 xlwt。

# 安装 openpyxl
pip install openpyxl

openpyxl 核心操作演示

from openpyxl import Workbook
from openpyxl.styles import Font, Alignment

# 1. 初始化工作簿与工作表
workbook = Workbook()
default_sheet = workbook.active
default_sheet.title = "员工信息"

# 创建新的工作表并指定位置
summary_sheet = workbook.create_sheet("数据汇总", 0)

# 2. 写入数据
# 方式一:通过单元格坐标直接赋值
default_sheet['A1'] = "姓名"
default_sheet['B1'] = "部门"
default_sheet['C1'] = "薪资"

# 方式二:使用 cell 方法指定行列
default_sheet.cell(row=2, column=1, value="张三")
default_sheet.cell(row=2, column=2, value="研发部")
default_sheet.cell(row=2, column=3, value=15000)

# 方式三:批量追加行数据
employee_data = [
    ["李四", "市场部", 12000],
    ["王五", "人事部", 11000],
    ["赵六", "研发部", 16000]
]
for row_data in employee_data:
    default_sheet.append(row_data)

# 3. 使用 Excel 公式
# 在 C6 单元格计算 C2 到 C5 的薪资总和
default_sheet['C6'] = '=SUM(C2:C5)'

# 4. 调整样式(可选)
for cell in default_sheet[1]:
    cell.font = Font(bold=True, color="FFFFFF")
    cell.alignment = Alignment(horizontal='center')

# 5. 保存文件
workbook.save("company_data.xlsx")

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

linux screen 用法详情 (nohup 的替代方案)

一、screen 是什么?能干嘛?screen 是一个终端复用器,可以:在一个 SSH 会话中开多个“虚拟终端”SSH 断线后,程序仍然在后台运行随时重新连接到原来的会话特别适合:nohup 的替代方案跑脚本 / 爬虫 / 训练模型运维、远程开发二、安装 screen# CentOS / Rocky / Almayum install -y screen# Debian / Ubuntuapt i...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。