C++ 开发者学习 Python 的第一步:用一个文本统计工具入门
前言
我原来的主要基础在 C++,刚开始学习 Python 时,第一感觉是语法很轻:不用写头文件,不用手动管理很多类型声明,也不用先编译再运行。
但真正开始写代码后会发现,Python 不是"语法更少的 C++"。它有自己的工程习惯,比如虚拟环境、包管理、字典和列表的高频使用、with open 文件处理、JSON 数据交换、类型标注等。
所以第一阶段我没有一上来学习机器学习算法,也没有直接冲 PyTorch,而是先用一个小项目把 Python 基础串起来:文本统计命令行工具。
这个工具要完成的事情很简单:读取一个 .txt 文件,统计行数、字符数、单词数、关键词出现次数,然后把结果保存成 result.json。
一、为什么 C++ 开发者需要先学 Python
如果后续目标是 AI 应用工程,Python 基础是绕不过去的。
大模型 API 调用、RAG 知识库、Agent 工具调用、FastAPI 后端、PyTorch 训练流程,大量示例和实际项目都以 Python 为主。对 C++ 开发者来说,学习 Python 的意义不是替代 C++,而是补齐 AI 应用开发中更常用的一套工具链。
C++ 更适合做高性能底层、推理部署、系统工程;Python 更适合快速验证想法、组织业务逻辑、调用模型能力、处理文本和数据。
这也是我第一阶段的目标:不是把 Python 所有语法学完,而是先达到这几个标准:
- 能创建 Python 虚拟环境。
- 能安装第三方包。
- 能写简单脚本和函数。
- 能使用
list、dict、set。 - 能读写文本、JSON、CSV。
- 能写一个小型命令行工具。
二、Python 环境准备
Python 程序通常不需要像 C++ 一样先编译成可执行文件,而是由解释器直接执行:
powershell
python test.py
查看 Python 版本:
powershell
python --version
查看 pip 版本:
powershell
pip --version
创建虚拟环境:
powershell
python -m venv .venv
在 Windows PowerShell 中激活虚拟环境:
powershell
.venv\Scripts\Activate.ps1
安装第三方库:
powershell
pip install requests
导出依赖列表:
powershell
pip freeze > requirements.txt
恢复依赖:
powershell
pip install -r requirements.txt
这里最重要的是理解虚拟环境。它可以理解成"当前项目自己的依赖空间"。如果不使用虚拟环境,不同项目安装的库和版本可能混在一起,后面排查问题会很麻烦。
三、list、dict、set 的基本使用
Python 里很多问题都可以靠内置数据结构快速解决。相比 C++,Python 的数据结构写起来更轻,适合快速处理业务数据和文本数据。
1. list:适合保存有序数据
list 可以类比 C++ 里的 vector。
python
names = ["Tom", "Jack", "Lucy"]
names.append("Mike")
for name in names:
print(name)
如果要保存一组有顺序的数据,比如文本的每一行、用户列表、关键词列表,就可以用 list。
2. dict:适合保存键值映射
dict 可以类比 C++ 里的 unordered_map。
python
student = {
"name": "Tom",
"age": 20,
}
print(student["name"])
文本统计结果很适合用字典保存:
python
result = {
"line_count": 5,
"char_count": 100,
"word_count": 20,
}
这样后面输出到 JSON 也很自然。
3. set:适合去重和判断存在
set 适合做去重和成员判断。
python
words = ["python", "ai", "python", "cpp"]
unique_words = set(words)
print(unique_words)
如果后续要做词频统计、关键词过滤、停用词过滤,set 会很常用。
四、文件读取和 JSON 输出
AI 应用中经常要处理文本、配置文件、接口返回值,所以文件和 JSON 是第一阶段必须掌握的内容。
读取文本文件:
python
with open("input.txt", "r", encoding="utf-8") as f:
text = f.read()
这里使用 with open(...),是因为它可以自动关闭文件。相比手动 f.close(),这种写法更稳,也更符合 Python 习惯。
保存 JSON:
python
import json
result = {
"line_count": 5,
"char_count": 100,
}
with open("result.json", "w", encoding="utf-8") as f:
json.dump(result, f, ensure_ascii=False, indent=2)
这里有两个参数很有用:
ensure_ascii=False:保存中文时不强制转义成 Unicode 编码。indent=2:让 JSON 文件格式更清晰,方便阅读。
五、文本统计工具实现思路
这个小项目的功能要求如下:
- 用户输入一个
.txt文件路径。 - 程序读取文件内容。
- 统计总行数、总字符数、总单词数。
- 统计用户指定关键词出现次数。
- 把统计结果输出到终端。
- 把统计结果保存到
result.json。
我没有把所有逻辑都写在 main 里,而是拆成几个函数:
read_text:负责读取文件。analyze_text:负责统计文本。save_result:负责保存 JSON。print_result:负责终端输出。main:负责组织程序流程。
这样拆分的好处是:每个函数只做一件事,后面如果要修改统计逻辑,不会影响文件读取和结果保存。
六、完整代码
python
import json
def read_text(file_path: str) -> str:
with open(file_path, "r", encoding="utf-8") as file:
return file.read()
def analyze_text(text: str, keyword: str) -> dict[str, int]:
lines = text.splitlines()
words = text.split()
return {
"line_count": len(lines),
"char_count": len(text),
"word_count": len(words),
"keyword_count": text.count(keyword),
}
def save_result(result: dict[str, int], output_path: str) -> None:
with open(output_path, "w", encoding="utf-8") as file:
json.dump(result, file, ensure_ascii=False, indent=2)
def print_result(result: dict[str, int]) -> None:
print("文本统计结果:")
print(f"总行数:{result['line_count']}")
print(f"总字符数:{result['char_count']}")
print(f"总单词数:{result['word_count']}")
print(f"关键词出现次数:{result['keyword_count']}")
def main() -> None:
file_path = input("请输入 txt 文件路径:").strip()
keyword = input("请输入要统计的关键词:").strip()
if not keyword:
print("关键词不能为空")
return
try:
text = read_text(file_path)
result = analyze_text(text, keyword)
print_result(result)
save_result(result, "result.json")
print("统计结果已保存到 result.json")
except FileNotFoundError:
print("文件不存在,请检查路径")
except OSError as error:
print(f"读取或写入文件失败:{error}")
if __name__ == "__main__":
main()
这段代码里我刻意加入了类型标注,例如:
python
def read_text(file_path: str) -> str:
它表示参数 file_path 是字符串,返回值也是字符串。Python 不会因为这个标注就变成静态语言,但它可以让代码更容易读,也方便编辑器做提示。
七、运行效果
假设 input.txt 内容如下:
text
hello python
hello ai
python is useful
运行程序:
powershell
python test.py
输入:
text
请输入 txt 文件路径:input.txt
请输入要统计的关键词:python
终端输出:
text
文本统计结果:
总行数:3
总字符数:36
总单词数:6
关键词出现次数:2
统计结果已保存到 result.json
生成的 result.json:
json
{
"line_count": 3,
"char_count": 36,
"word_count": 6,
"keyword_count": 2
}
八、这一阶段踩过的坑
1. 容易把 Python 写成 C++ 风格
刚开始会下意识想写很多临时变量、很多循环,甚至想提前设计复杂类。后来发现 Python 更适合先用简单函数把流程跑通,再决定是否需要类。
2. 容易忽略虚拟环境
一开始觉得直接 pip install 就行,但项目多了以后,依赖版本会混在一起。虚拟环境虽然看起来只是准备工作,但它是 Python 工程习惯的一部分。
3. 文件编码要明确写 utf-8
如果文本里有中文,读取和写入文件时最好明确指定:
python
encoding="utf-8"
这样可以减少不同系统、不同编辑器之间的乱码问题。
4. 不要把所有代码都写进一个函数
如果所有逻辑都放进 main,一开始看起来省事,但后面想加功能会越来越乱。拆成 read_text、analyze_text、save_result 之后,每一块职责更清楚。
5. dict 在 Python 项目里很常用
在 C++ 里我可能会先定义结构体或类,但在 Python 里,很多简单结果可以先用字典表示。尤其是后面要转成 JSON 时,dict 非常自然。
总结
第一阶段的重点不是学完所有 Python 语法,而是形成一条最小闭环:
text
环境准备 -> 基础语法 -> 数据结构 -> 文件处理 -> JSON 输出 -> 小工具项目
完成这个文本统计工具后,至少可以说明已经具备了继续学习 FastAPI、大模型 API、RAG 和 Agent 开发的基础。
下一阶段就可以从"写脚本"进入"写后端服务",开始学习 FastAPI,把 Python 能力封装成可以被外部调用的 API。