从 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。

相关推荐
Cx330❀1 小时前
从零实现一个 C++ 轻量级日志系统:原理与实践
大数据·linux·运维·服务器·开发语言·c++·搜索引擎
Agent产品评测局1 小时前
国产vs海外AI Agent方案,制造业场景适配性横评:企业级自动化选型全景深度解析
运维·人工智能·ai·chatgpt·自动化
电子科技圈1 小时前
XMOS将亮相台北国际电脑展并演示其在边缘AI和创新音频与互联等领域内的新方案
人工智能·游戏·计算机视觉·视觉检测·音视频·语音识别·实时音视频
沪漂阿龙1 小时前
AI大模型面试题:朴素贝叶斯是什么?贝叶斯定理、条件独立、拉普拉斯平滑、文本分类、零概率问题一文讲透
人工智能·分类·数据挖掘
程序leo源1 小时前
Linux深度理解
linux·运维·服务器·c语言·c++·青少年编程·c#
AI玫瑰助手1 小时前
Python流程控制:while循环嵌套与死循环避免技巧
开发语言·python·信息可视化
慧一居士1 小时前
Trae 、Qoder 、CodeBuddy IDE 比较及选型
人工智能
计算机安禾1 小时前
【c++面向对象编程】第7篇:static成员:属于类而不是对象的变量和函数
java·c++·算法
影sir1 小时前
STL容器——list类
c++·链表·stl·list