从 C++ 转向 AI 应用工程:我的 Python 基础第一阶段复盘

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 虚拟环境。
  • 能安装第三方包。
  • 能写简单脚本和函数。
  • 能使用 listdictset
  • 能读写文本、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 文件格式更清晰,方便阅读。

五、文本统计工具实现思路

这个小项目的功能要求如下:

  1. 用户输入一个 .txt 文件路径。
  2. 程序读取文件内容。
  3. 统计总行数、总字符数、总单词数。
  4. 统计用户指定关键词出现次数。
  5. 把统计结果输出到终端。
  6. 把统计结果保存到 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_textanalyze_textsave_result 之后,每一块职责更清楚。

5. dict 在 Python 项目里很常用

在 C++ 里我可能会先定义结构体或类,但在 Python 里,很多简单结果可以先用字典表示。尤其是后面要转成 JSON 时,dict 非常自然。

总结

第一阶段的重点不是学完所有 Python 语法,而是形成一条最小闭环:

text 复制代码
环境准备 -> 基础语法 -> 数据结构 -> 文件处理 -> JSON 输出 -> 小工具项目

完成这个文本统计工具后,至少可以说明已经具备了继续学习 FastAPI、大模型 API、RAG 和 Agent 开发的基础。

下一阶段就可以从"写脚本"进入"写后端服务",开始学习 FastAPI,把 Python 能力封装成可以被外部调用的 API。

相关推荐
小小放舟、1 分钟前
VS Code Code Runner 中文乱码修复与 IDEA 风格输出配置
vscode·python·code runner
衣舞晨风2 分钟前
什么样的 AI 网关算是一个好网关
网络·人工智能·网关·ai·大模型·ai网关
小宋10217 分钟前
普通人如何把 AI 用成“第二大脑”?从提问到知识整理的完整方法
人工智能
无忧智库8 分钟前
数据安全与数据合规体系建设规划:从“合规应付”到“数据可控、可用、可审计”的落地指南(PPT)
大数据·人工智能·安全
沐风___11 分钟前
DESIGN.md:把 AI 生成 UI 从凭感觉变成可验证工程
人工智能
玩美数据14 分钟前
2026全球出海市场研究TOP5:深度行业洞察与高效供应商网络塑造市场竞争力
大数据·人工智能
中科岩创22 分钟前
全栈本地化专属部署架构,服务智慧矿山信息化安全建设!
大数据·人工智能·物联网
数智前线23 分钟前
Forrester最新报告发布:OceanBase成唯一入选中国厂商
人工智能
葡萄城技术团队23 分钟前
AI 不会淘汰电子表格,反而会让电子表格成为 AI 操作系统
前端·人工智能
monsion24 分钟前
AG-UI 协议详解:Agent 与用户之间缺失的那一层
人工智能·ui·个人开发