Python
- 基础
-
库
- 其他
- argparse命令行参数解析
- asyncio自带异步编程库
- aiofiles异步文件读写库
- beautifulsoup4_HTML_XML解析库
- colorama_在终端输出漂亮的字
- datasets数据集处理
- html2text
- httpx_HTTP请求库
- litellm
- loguru日志库
- numpy科学计算基础库
- pillow图像处理
- pydantic数据验证
- pyyaml
- requests_HTTP请求库
- tenacity重试
- tiktoken计算Token量
- torch机器学习_深度学习框架
- tomli TOML文件解析库
- tomllib 自带TOML文件解析库
- unidiff_文本_文件差异对比
- uvicorn_Web服务器
- langchain
**unidiff 是一个 Python 库,用于生成和处理** **统一格式的差异(diff),也就是我们常说的“unified diff”格式**,主要用于对比两个文本文件或文本内容之间的差异,并以标准化的格式输出。
---
## 一、unidiff 是什么?(简单理解)
- 它是一个专门用来处理 **“差异对比(diff)”** 的 Python 工具库,支持生成和解析 **统一格式(unified diff)** 的文本差异内容。
- **unified diff** 是一种标准的差异表示格式,广泛用于代码版本控制(如 Git)、补丁文件、代码审查等场景。
- unidiff 可以让你:
- **比较两个文本(比如两个版本的代码文件)**
- **生成类似 git diff 的标准化差异输出**
- **解析已有的 diff 文本,提取出修改了哪些行、新增了哪些内容等信息**
---
## 二、unidiff 解决什么问题?
当你在做以下事情时,可能会用到 unidiff:
| 场景 | 说明 |
|------|------|
| **对比两个文件/文本的差异** | 比如对比代码修改前后、配置文件变化等 |
| **生成类似 git diff 的差异内容** | 以统一的格式输出差异,便于阅读或后续处理 |
| **解析 diff 文件或文本** | 比如读取 .patch 文件,分析其中做了哪些改动 |
| **构建代码审查、自动化测试、CI 工具** | 需要理解代码变更内容、生成或处理差异信息 |
| **替代手动处理 diff 格式** | 标准化、结构化地处理差异,避免自己解析复杂的 diff 文本 |
---
## 三、安装 unidiff
使用 pip 安装:
```bash
pip install unidiff
```
---
## 四、unidiff 基本用法示例
### 示例 1:生成两个文本的 unified diff
```python
from unidiff import PatchSet
from io import StringIO
# 两个版本的文本内容
old_text = """第一行
第二行
第三行"""
new_text = """第一行
第二行修改了
第三行"""
# 构造一个 PatchSet(差异集合)
patch = PatchSet.from_string(
old_text, new_text,
fromfile='old.txt',
tofile='new.txt'
)
# 输出 unified diff 格式
print(patch.patch_string.decode('utf-8'))
```
> 注意:更常见的用法是比较两个文件或字符串后,生成类似 `git diff` 的输出格式。
---
### 示例 2:解析一个 diff 文本(比如 patch 文件内容)
```python
from unidiff import PatchSet
# 假设这是一个 diff 或 patch 文件的内容
diff_text = """
--- old.txt
+++ new.txt
@@ -1,3 +1,3 @@
第一行
-第二行
+第二行修改了
第三行
"""
# 解析这个 diff
patch = PatchSet(diff_text)
# 遍历每一个改动文件
for file_patch in patch:
print(f"文件: {file_patch.path}")
for hunk in file_patch:
print(f"改动位置: {hunk.source_start}-{hunk.source_length}")
for line in hunk:
if line.is_added:
print(f"+ 增加: {line.value.strip()}")
elif line.is_removed:
print(f"- 删除: {line.value.strip()}")
else:
print(f" 未变: {line.value.strip()}")
```
---
## 五、unidiff 的主要功能
| 功能 | 说明 |
|------|------|
| **生成 unified diff** | 比较两个文本/文件,输出标准 diff 格式 |
| **解析 diff / patch 文本** | 读取 diff 内容,分析出哪些行被修改、新增、删除 |
| **支持文件对比** | 可以比较两个文件对象或字符串内容 |
| **结构化访问差异信息** | 可以获取每个文件的改动、每个 hunk(块)的详情、每行的状态(增删改) |
| **适用于自动化工具** | 方便集成到 CI、代码审查、版本管理工具中 |
---
## 六、总结(中文)
> **unidiff 是一个用于生成和解析统一格式差异(unified diff)的 Python 库,常用于对比文本或代码文件的变动,生成类似 git diff 的输出,或者解析 patch 文件内容,了解具体改动细节。**
>
> 它特别适合用在**代码版本管理、自动化测试、CI/CD 流程、代码审查工具**等需要处理差异信息的场景。
---
✅ **简单来说:**
> 如果你需要在 Python 中**对比两段文本或文件的差异,并生成或解析标准的 diff 格式(比如 git diff 的输出),unidiff 就是非常好用的工具库。**