
大家好,我是程序员晚枫。
自从我的开源项目 python-office 在2025年初达成1000 star的里程碑以来,我越来越清晰地认识到,一个项目的成长不仅在于功能的堆积,更在于开发流程的规范与高效。在AI技术席卷而来的今天,我发现自己编程时越来越多的工作,已经可以完全信任地交给AI伙伴。
今天,我就结合 python-office 这个我们共同的项目,通过具体的代码演示,分享我现在100%用AI来做的6件事。这些改变,让我的开发效率提升了数倍,也让项目的质量更加稳定。
本文中所有AI编程的实现,都是基于AI编程软件:Trae
1. 脚本编写:从模糊需求到一行式函数
在维护 python-office 时,很多功能灵感来源于粉丝的"一句话需求",比如"能不能批量合并PDF?"、"如何一键给Excel加表头?"。过去,我需要自己设计函数签名、逻辑和异常处理。现在,我将需求描述直接抛给AI。
AI实战场景 :为 pofile 模块(文件处理)增加一个"智能整理桌面"的功能。
我的需求提示:
"请编写一个Python函数,命名为
tidy_desktop。它接收一个目标路径参数(默认是用户桌面),能自动识别该路径下所有文件的类型(如图片、文档、压缩包),并创建对应的文件夹(如Images、Documents、Archives),将文件移入其中。请处理好路径不存在的情况,并返回整理的报告信息。函数风格需与 python-office 项目一致,保持简单的一行调用风格。"
AI生成的代码骨架示例:
python
# 位于:python-office/office/file/tidy.py
import os
import shutil
from pathlib import Path
def tidy_desktop(target_dir=None):
"""
一键整理指定目录(如桌面),自动按文件类型分类存放。
Args:
target_dir (str, optional): 要整理的目录路径。默认为当前用户的桌面。
Returns:
str: 整理结果的报告字符串。
Raises:
FileNotFoundError: 当目标目录不存在时。
"""
if target_dir is None:
target_dir = Path.home() / 'Desktop'
target_path = Path(target_dir)
if not target_path.exists():
raise FileNotFoundError(f"目标目录不存在: {target_dir}")
# 文件类型映射
file_type_folders = {
'.jpg': 'Images', '.png': 'Images', '.pdf': 'Documents',
'.docx': 'Documents', '.xlsx': 'Documents', '.zip': 'Archives',
# ... 其他映射关系
}
report_lines = []
for file_path in target_path.iterdir():
if file_path.is_file():
suffix = file_path.suffix.lower()
folder_name = file_type_folders.get(suffix, 'Others')
folder_path = target_path / folder_name
folder_path.mkdir(exist_ok=True)
shutil.move(str(file_path), str(folder_path / file_path.name))
report_lines.append(f"已移动: {file_path.name} -> {folder_name}/")
return "\n".join(report_lines) if report_lines else "目标目录内未发现可整理的文件。"
我不再需要记忆 shutil、pathlib 每个方法的细节,AI生成的代码结构清晰,注释完整,我只需关注核心的业务逻辑映射和最终的测试验收。这让我能更专注于思考如何将复杂功能简化成一行的API,就像 python-office 追求的那样:import office; office.file.tidy_desktop()。
2. README与文档:告别"提笔忘字"
维护文档曾是项目最大的"债"。python-office 作为一个包含 poexcel、poword、popdf 等多个模块的集合,每个新功能的加入都需要同步更新文档,耗时耗力。
AI实战场景 :为刚刚新增的 tidy_desktop 函数自动生成API文档和Markdown示例。
我的需求提示:
"根据上面的
tidy_desktop函数代码,为 python-office 项目的文档生成以下内容:
- 一段标准的Google风格函数说明(已包含在代码中)。
- 一个独立的Markdown文档片段,包含功能描述、安装命令、使用示例和注意事项。"
AI生成的Markdown文档示例:
markdown
## 📂 tidy_desktop - 智能整理桌面文件
### 功能简介
一键整理您的桌面(或任何指定文件夹),自动将散乱的文件按类型(图片、文档、压缩包等)归类到对应的子文件夹中,让工作空间瞬间恢复整洁。
### 快速开始
```python
import office
# 整理当前用户桌面
result = office.file.tidy_desktop()
print(result)
# 整理指定文件夹
result = office.file.tidy_desktop(r"D:\临时文件")
print(result)
参数说明
target_dir(str,可选): 需要整理的目录路径。如果不提供,则默认整理当前系统的桌面目录。
注意事项
- 该操作会直接移动文件,建议首次使用时先在不重要的文件夹上测试。
- 目前支持常见格式,如需增加类型,可在代码的
file_type_folders字典中补充。
python
更重要的是,AI可以帮我维护项目的 `CONTRIBUTING.md`。当有新的开源小伙伴想参与时,AI能根据我设定的规则,即时生成或更新贡献指南,例如提醒贡献者:"请在 `contributors` 文件夹下,用你自己的GitHub名字新建目录来存放代码"。
### 3. 代码规范性调整:秒级统一的代码风格
一个健康的开源项目需要统一的代码风格。在 `python-office` 的后续计划中,第一项就是"统一参数命名,统一代码风格"。过去,我通过 `flake8`、`black` 等工具并结合 `pre-commit` 钩子在提交时检查。现在,AI在编码时就能充当实时顾问。
**AI实战场景**:审查贡献者提交的一个新功能模块代码。
**我的操作**:将贡献者提交的代码片段粘贴给AI,并给出指令。
**我的需求提示**:
> "请以PEP 8规范严格审查以下Python代码,指出所有不符合规范的地方(如命名、空格、行长度、注释),并直接输出修正后的代码。项目要求函数名用小写字母加下划线,类型提示尽量完整。"
>
**AI的审查与修正示例**:
```python
# 贡献者提交的原始代码(可能存在不规范)
def FileProcess(filepath, num):
'''处理文件'''
with open(filepath,'r') as f:
data=f.read()
#做一些计算
result=data.count('a')*num
return result
# AI审查后修正的代码
from pathlib import Path
from typing import Union
def process_file_count(file_path: Union[str, Path], multiplier: int) -> int:
"""
统计指定文件中字母'a'的出现次数,并乘以给定的倍数。
Args:
file_path: 要处理的文件路径。
multiplier: 结果乘数。
Returns:
处理后的整数值。
"""
with open(file_path, 'r', encoding='utf-8') as file:
data = file.read()
# 统计字母'a'的出现次数
count_a = data.count('a')
result = count_a * multiplier
return result
AI不仅修正了命名(蛇形命名法)、空格、文档字符串(使用三引号),还主动添加了类型提示和更明确的编码参数。这让我在代码合并前就能快速完成初步的质量把关,确保项目代码库的整洁度。
4. 单元测试:告别思维死角,追求高覆盖率
随着 python-office 下载量超过26万次,功能的稳定性至关重要。编写全面的单元测试是保证,但构思各种边界情况(异常输入、极端值)非常枯燥。
AI实战场景 :为 poword 模块中一个合并文档的函数生成单元测试。
我的需求提示:
"为以下函数编写完整的
pytest单元测试。函数:merge_docs(doc_paths: List[str], output_path: str) -> bool。请覆盖:正常合并、输入列表为空、文件不存在、输出路径无权限、合并后内容验证等场景。使用pytest.fixture管理临时文件。"
AI生成的测试代码骨架:
python
# 位于:tests/test_word/test_merge.py
import pytest
from pathlib import Path
from poword import merge_docs
class TestMergeDocs:
"""测试文档合并功能"""
@pytest.fixture
def sample_docs(self, tmp_path):
"""创建两个临时Word文档作为测试夹具"""
doc1 = tmp_path / "doc1.docx"
doc2 = tmp_path / "doc2.docx"
# 此处AI会生成创建简单Word文档的代码(使用python-docx)
# ...
return [str(doc1), str(doc2)]
def test_merge_success(self, sample_docs, tmp_path):
"""测试正常合并场景"""
output = tmp_path / "merged.docx"
result = merge_docs(sample_docs, str(output))
assert result is True
assert output.exists()
# 此处可进一步验证合并后的页数或内容
def test_merge_empty_list(self, tmp_path):
"""测试输入为空列表的情况"""
output = tmp_path / "output.docx"
# 假设函数应返回False或抛出特定异常
result = merge_docs([], str(output))
assert result is False
def test_merge_nonexistent_file(self, tmp_path):
"""测试输入包含不存在的文件"""
fake_file = tmp_path / "fake.docx"
output = tmp_path / "output.docx"
with pytest.raises(FileNotFoundError):
merge_docs([str(fake_file)], str(output))
# ... 其他测试用例
AI生成的测试用例考虑到了我可能忽略的角落,比如"输出路径是一个已存在的目录而非文件"。通过让AI生成测试骨架,我再填充具体的断言细节,单元测试的覆盖率和可靠性大大提升,这正是项目"增加单元测试覆盖率"计划所需要的。
5. Git操作:智能化的版本管理助手
日常开发中,git commit -m "update" 这种糟糕的提交信息屡见不鲜。在带领开源小伙伴共同维护 python-office 时,清晰的提交历史和分支管理是关键。
AI实战场景:智能生成符合约定的提交信息,并分析代码差异。
我的操作 :在运行 git diff 后,将变更内容粘贴给AI。
我的需求提示:
"分析以下Git代码差异(diff),为我生成一条符合约定式提交(Conventional Commits)规范的高质量提交信息。格式为:
<type>(<scope>): <subject>。变更内容是为poexcel模块的读取功能增加了对CSV文件格式的支持。"
AI生成的提交信息:
markdown
feat(poexcel): add support for reading CSV files in excel.read function
- Extend `excel.read` function to automatically detect and parse `.csv` files.
- Add `encoding` parameter for CSV files to handle different text encodings.
- Update related documentation and examples.
此外,在计划为 python-office 增加诸如"网站快捷搭建"等新模块时,我会让AI帮助分析从主分支创建特性分支的策略,以及后续可能发生的合并冲突预判,让版本管理从"记录"变为"规划"。
6. 扩展开发:快速构思与原型验证
python-office 的未来充满了扩展的可能,比如集成AI接口、开发GUI界面或搭建在线服务。从一个想法到一个可运行的原型,中间有大量探索性代码要写。
AI实战场景:构思并验证一个"智能文档摘要"扩展模块。
我的需求提示:
"我想为
python-office项目扩展一个AI功能:智能文档摘要。请为我设计一个原型模块smart_summary的代码结构。该模块应能读取word文件,调用大语言模型API(假设有API密钥)生成摘要,并返回结果。请考虑面向初学者的简易API设计,并展示核心函数的实现思路。"
AI生成的原型设计:
python
# 项目结构建议
python-office/
├── office/
│ ├── smart/ # 新的智能功能模块
│ │ ├── __init__.py
│ │ └── summary.py # 摘要功能核心代码
│ └── ... (其他模块)
# summary.py 核心函数设计
import popdf # 复用现有的PDF模块
import poword # 复用现有的Word模块
from typing import Literal
def summary(file_path: str,
length: Literal['short', 'medium', 'long'] = 'medium',
api_key: str = None) -> str:
"""
一键生成文档摘要。
Args:
file_path: PDF或Word文档路径。
length: 摘要长度。
api_key: 可选,AI服务API密钥。如未提供,尝试使用环境变量。
Returns:
生成的摘要文本。
Raises:
ValueError: 文件格式不支持或无法读取。
"""
# 1. 根据后缀使用popdf或poword提取纯文本
# 2. 智能切分和预处理文本(避免超出模型令牌限制)
# 3. 构造Prompt,调用LLM API(如OpenAI、DeepSeek等)
# 4. 解析并返回结果
# AI在此处会生成大致的代码填充骨架和关键步骤的伪代码
...
这个由AI生成的设计蓝图,清晰地勾勒出了新模块如何与现有项目融合(复用 popdf、poword),并设计了简单直观的API。这让我能在投入大量编码时间前,快速验证技术路线的可行性,甚至生成一个可演示的"最小可行产品"(MVP)。
结语:从工具到思维,我的AI编程课
以上这6个场景,就是我日常维护和开发 python-office 时,与AI深度协作的真实写照。AI没有替代我,而是将我从事务性、重复性的编码劳动中解放出来,让我能更专注于架构设计、功能创意和社区运营------这些才是开源项目维护者的核心价值。
这种转变,不仅仅是学会使用某个AI编码工具,而是一种全新的、与AI协同思考的"编程思维"。