⚠️
使用须知(点右上角 × 可收起):
版权边界:本站内容均为公开资料整理 + 你的个人学习笔记,不收录任何需登录付费课程(如 atacollege)或盗版资源;请勿用于商业转载。
在线运行器限制:基于浏览器 Pyodide,已预装 NumPy / Pandas / Matplotlib;不支持 OpenCV、视频处理与读取你电脑本地真实文件,这类代码请复制到本地 VS Code 运行。
进度存储:学习进度仅存本机浏览器,可用上方「⬇ 导出进度」备份,换设备用「⬆ 导入进度」恢复。

你好,零基础小伙伴 👋

这个平台为你量身打造:把「人工智能训练师」考试要考的东西,拆成能看懂、能记住、能上手的小块。下面是你给的目录,也是我们学习的顺序。

📍 你的学习路线图(对照你给的教学目录)

0 变量与打印 1 列表/字典 2 条件·循环·计数 3 字符串·函数 4 文件夹遍历 5 NumPy 6 JSON·异常 7 Pandas 8 图片读写 9 可视化 10 综合实战
🚀 融合学习路径
0-10 关递进语法卡逐行注释在线运行
📘 十大理论模块
只记忆自测题
🖼️ 图像处理实操
翻转灰度标注流程
🛠️ 实操考核详解
采集30%标注60%运维10%
📝 理论填空必背
真题填空必备函数
🐍 Python 在线运行器
自由写代码即时出结果

🧭 怎么用这个平台(3 步闭环)

1. 看讲解

每个概念都有「这是什么 + 为什么 + 举例」,小白也能懂。

2. 背函数

每个库都给你函数速查表,像背单词一样背下来。

3. 练真题

点开真题卡,先想答案再点开看解析,错题反复刷。

📌 2026 年考试最新要求(先知道考什么)

  • 等级:本项目只讲 五级/初级(国家新职业资格的入门级),不含中级/高级/技师级内容。
  • 你当前考(五级/初级)理论(90分钟) + 实操(120分钟) 机考,两科均 ≥ 60 分合格。
  • 合格线:每科 100 分,60 分及格,两科都及格才算过;单科合格保留 1 年,可补考 1 次。
  • 理论题型:判断题(20题)、单选题(约60题)、多选题(20题)—— 都是客观题,机考作答。
  • 实操题型:数据采集与整理(30%)、数据清洗(25%)、数据标注(40%)、操作规范(5%)—— 无复杂编程,侧重规范与工具
💡 提示:五级实操虽「无复杂编程」,但会用 Python + Pandas / SQLite 做数据采集、清洗、标注统计的代码填空(如客服会话采集、情感标注)。本平台「在线运行器」就是帮你练这个。

十大理论模块 · 速记版

这 10 块是「只需要记忆」的理论知识。每块给出 重点卡片(背)和 自测题(点开看答案)。建议:先读卡片,合上书自测,错了再回看。

点击任意「自测题」卡片可展开答案与解析。

🚀 融合学习路径:从 0 基础到真题精通

这一条路把 Python 基础 + NumPy + Pandas + 数据可视化 + 深圳华必达六大实操考点 全部揉在一起,从「完全不会」一路练到「能写真题代码」。不用再翻前面四个基础模块,跟着关卡走到底即可。每一关都有:语法卡(新函数先给格式)、逐行中文注释记忆口诀联手案例▶️ 在线运行。碰到英文单词(如 print、for、import)我会直接告诉你中文意思。

✅ 零基础友好说明:本路径所有代码都能在下方「▶️ 在线运行」中直接跑(首次运行需联网几秒加载 Python)。第 8 关真实图片/第 10 关视频因浏览器装不了 OpenCV,平台已用「模拟版」演示流程,真实代码可复制到本地 VS Code 运行。
0 变量与打印 1 数据类型 2 条件·循环·计数 3 字符串·函数 4 文件夹遍历 5 NumPy 6 JSON·异常 7 Pandas 8 图片读写 9 可视化 10 综合实战
📲 学习进度(仅存本机):
🎯 快速跳转关卡:

🔰 写代码前的「缩进」交通规则(先看一遍,后面每关都会重复)

Python 不用大括号,用缩进(前面空 4 个空格)来表示「这几行是一伙的」。新手 90% 的报错都是因为缩进错了。

# ✅ 正确示范:if 后面要加冒号,下一行缩进 4 个空格
if age >= 18:
    print("成年")          # 这行缩进了,属于 if 管
else:                       # else 和 if 对齐,不缩进
    print("未成年")        # else 管的内容再缩进

# ✅ 正确示范:for 后面也要加冒号,循环体缩进
for x in [1, 2, 3]:
    print(x)                # 缩进:在循环里,执行 3 次
print("结束")               # 不缩进:循环跑完才执行 1 次

# ✅ 正确示范:def 函数后面加冒号,函数体缩进
def say_hello(name):
    print("你好", name)      # 缩进:属于函数内部

say_hello("小李")           # 不缩进:调用函数,和 def 对齐
🧾 缩进口诀卡
  • : 冒号出现 → 下一行必须缩进 4 空格。
  • 同一个「队伍」的代码,左边要对齐。
  • 想结束这个队伍 → 把下一行顶格写(和 if/for/def 对齐)。
  • 不要混用 Tab 和空格,全用空格最保险。

阶段 0Python 第零课:变量、打印、注释(完全零基础)

这一关你只需要记住三件事:①print 显示结果 ②变量=盒子存数据 ③# 写注释。英语恐惧症先治好:print=打印(把结果打到屏幕上);name=名字(你给数据起的代号)。

📐 语法卡 · 最常用三个写法
  • 变量名 = 值 —— 把右边的值存进左边的"盒子"(变量)
  • print(内容) —— 在屏幕上显示内容,多个内容用逗号 , 隔开,默认会自动加空格
  • print(a, b, sep="") —— sep 是"分隔符",写成空字符串 "" 就不加空格了
  • # 这是注释 —— 井号后面是说明文字,电脑不执行,方便你回忆
# print 默认:逗号会变成空格
print("年", "月", "日")          # 输出:年 月 日(中间有空格)

# sep="" 去掉空格,=sep"" 紧密相连
print("年", "月", "日", sep="")  # 输出:年月日(没有空格)

# sep 也可以换成别的符号
print("2026", "08", "15", sep="-")  # 输出:2026-08-15
🧾 阶段 0 规则卡
  • 字符串必须用引号包起来:单引号 ' 或双引号 " 都可以,但不能只写一边。
  • 变量=盒子:等号 = 是「装进去」,不是数学里的相等;右边先算,结果装进左边。
  • print 里面逗号会自动变空格;想不要空格,就加 sep=""
  • 注释以 # 开头,电脑不看,写给人看;写清楚你在算什么。
# print 英文=打印,意思是在屏幕上显示内容
print("你好,我是人工智能训练师")

# 变量:就是一个贴了名字的盒子,= 把右边的值装进左边的盒子
name = "小明"          # 字符串(文字)用引号包起来
age = 18               # 数字直接写
print(name, "今年", age, "岁")   # 多个内容用逗号隔开一起显示

# 注释:# 后面是给"人"看的说明,电脑会直接忽略,不会执行
# 计算:+加 -减 *乘 /除
total = 90 + 88        # 先算右边 178,再装进 total
print("两科总分:", total)

📖 逐行解释

  1. print(...) 就是"把括号里的内容念出来"给你看。
  2. = 不是数学里的相等,而是"赋值":把右边算好的结果装进左边盒子里。
  3. 字符串是用引号包起来的文字(如 "小明");数字直接写(如 18)。
  4. # 注释 是写给你自己看的笔记,考试和写代码时都要养成写注释的习惯。
🧠 记忆口诀:「等号右边先算,结果装进左边盒;print 开口念,# 后面人来看。」
🤝 联手案例 · 判断你会不会

把下面这段话写成代码并打印:你叫"小红",今年 20 岁,请显示"小红 年龄 20"。

name = "小红"
age = 20
print(name, "年龄", age)
🎯 再练几道(不同类型)
  • 定义变量 price = 3.5,quantity = 4,计算总价 total 并打印。
  • 用一条 print 同时输出自己的姓、名和年龄,中间用空格分开。
  • 写注释说明下面一行是计算长方形面积:长 5,宽 3。
  • sep="" 输出 "2026年08月15日"(不给空格)。
  • 定义 a=7, b=3,打印 "7+3=10" 注意等号两边没有空格。

▶️ 在线运行:阶段 0 · 变量与打印

阶段 0 · 变量与打印
(点击运行查看结果)

阶段 1数据类型:列表、字典、布尔(记事本升级)

电脑里有几种"容器":列表像一排带编号的储物柜,字典像姓名贴标签的抽屉,布尔只有"真/假"两种状态。关键英文:list=列表/清单,dict=字典,len=length/长度。

📐 语法卡 · 两种容器写法
  • 列表 = [值1, 值2, ...] —— 一排数据;用 列表[编号] 取,编号从 0 开始
  • 列表[-1] —— 反取最后一个;列表[-2] 反取倒数第二个
  • 字典 = {"标签": 值, ...} —— 用 字典["标签"] 取值;标签必须用引号
  • len(列表/字典) —— 量长度/数个数,经常和 if 一起用
  • if len(列表) > 2: —— 先量长度,再判断,否则 Python 会懵
# 反取值:从后面倒着拿
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
print("最后一个:", fruits[-1])   # 葡萄
print("倒数第二个:", fruits[-2]) # 橙子

# len 像一把尺子:先量长度,才能判断
scores = [78, 92, 56]
if len(scores) > 2:             # 先数有几个,再判断是否超过 2
    print("成绩超过 2 条")
else:
    print("成绩不够 2 条")

# 字典标签必须加引号;取值用中括号 [ ]
info = {"name": "小李", "age": 22}
print(info["name"])             # 小李
🧾 阶段 1 规则卡
  • 列表用中括号 [ ],里面元素用逗号分开;取第 1 个写 [0],取最后写 [-1]
  • 字典用大括号 { },格式是 "标签": 值标签必须加引号
  • 取值也用中括号:列表用编号 list[0],字典用标签 dict["name"]
  • 判断长度要先 len():不能直接写 if scores > 2,要写 if len(scores) > 2
# 列表 list(英文=清单):一排带编号的盒子,用中括号 [ ]
scores = [78, 92, 56, 88, 61]     # 5 个成绩,编号从 0 开始
print("第一个成绩:", scores[0])    # 取第 1 个(编号0)→ 78
print("成绩个数:", len(scores))    # len=length 长度,共 5 个

# 字典 dict(英文=字典):用"标签"而不是编号来取,像姓名贴
stu = {"name": "小明", "score": 88, "city": "深圳"}
print("姓名:", stu["name"])        # 用标签 "name" 取 → 小明
stu["score"] = 95                 # 修改标签对应的值
print("改后分数:", stu["score"])

# 布尔 bool(英文=真假):只有 True(真)和 False(假)
print(78 >= 60)                   # 78 不小于 60 → True(及格)

📖 逐行解释

  1. scores[0] 取第一个元素,因为编号从 0 开始(0=第1个,1=第2个…)。
  2. len(scores) 返回列表中元素个数。
  3. 字典 用 stu["name"] 按标签取;改值时写 stu["score"] = 95。
  4. 78 >= 60 是比较,结果是 True 或 False(布尔值),后面条件判断会天天用。
🧠 记忆口诀:「列表编号从 0 起,字典按标签找;len 一问有几个,bool 只答真与假。」
🤝 联手案例 · 练手:用字典记一个人

创建一个字典记录你的信息:姓名"小李"、年龄 22、城市"广州",并打印出年龄。

info = {"name": "小李", "age": 22, "city": "广州"}
print("年龄:", info["age"])
🎯 再练几道(不同类型)
  • 创建一个列表 cities = ["北京","上海","广州"],打印最后一个城市。
  • 给上面的 stu 字典增加一个"phone"键,值为"13800138000",再打印。
  • 判断列表 [3,1,4,1,5] 的长度是否大于 3,打印 True/False。
  • 取列表 [10,20,30,40] 的最后一个元素和倒数第二个元素。
  • 字典 {"A":90,"B":80,"C":70},打印 B 对应的值(用 dict["B"])。

▶️ 在线运行:阶段 1 · 列表与字典

阶段 1 · 列表与字典
(点击运行查看结果)

阶段 2 ⭐条件、循环与计数(华必达第 1 关)

题目:给定成绩列表,完成①逐个输出②输出及格成绩③统计通过人数;挑战分段统计。这是真题第一关。关键英文:for=对于每一个,if=如果,elif=否则如果,else=否则。

📐 语法卡 · 本关必背格式
  • for 元素 in 列表: —— 依次把列表里每个值交给"元素",循环执行缩进块
  • if 条件: —— 条件成立(True)才执行下面缩进块
  • elif 条件: —— 上面 if 不成立时,再判断这个条件
  • else: —— 上面所有条件都不成立时执行
  • 计数 += 1 —— 计数器加 1,等于 计数 = 计数 + 1
scores = [78, 92, 56, 88, 61]

# 1. 逐个输出(for=对于每一个)
print("=== 所有成绩 ===")
for s in scores:          # s 依次取到 78,92,56...
    print(s)

# 2. 只输出及格(>=60)的
print("=== 及格成绩 ===")
for s in scores:
    if s >= 60:           # if=如果,条件成立才执行缩进块
        print(s)

# 3. 统计通过人数(计数器三步走)
pass_count = 0            # ① 先归零
for s in scores:
    if s >= 60:
        pass_count += 1   # ② 满足条件加 1(+= 即 =自身+1)
print("通过人数:", pass_count)   # ③ 循环外打印结果

# 挑战:分段统计
high = mid = low = 0
for s in scores:
    if s >= 90:
        high += 1         # 优秀
    elif s >= 60:         # elif=否则如果
        mid += 1          # 及格
    else:
        low += 1          # 不及格
print("优秀/及格/不及格:", high, mid, low)

📖 逐行解释

  1. for s in scores:s 是临时变量,每次循环自动取下一个成绩。
  2. if s >= 60:只有及格才打印;注意 >= 是"大于等于"。
  3. 计数器固定写法:循环外先 pass_count = 0,循环内满足条件 pass_count += 1,循环外再打印。
  4. elif/else 自上而下判断,进了一个分支就跳过其余,所以先写高分再写低分避免重叠。
🧠 记忆口诀:「计数器三步走:先归零、条件里加一、循环外打印。if 冒号别忘了,下一行要缩进。」
🧾 阶段 2 规则卡
  • for 后面必须加冒号 for x in 列表:,循环体缩进 4 空格。
  • if 后面必须加冒号 if 条件:,条件成立才执行下面缩进的代码。
  • else 不能单独写条件,它是「上面所有 if/elif 都不成立时才执行」。
  • 计数器三步走:① 循环外清零 ② 循环内满足条件加 1 ③ 循环外打印。
  • elif 顺序很重要:先判断高分,再判断低分,避免一个成绩被重复计数。
🤝 联手案例 · 变式练习

把及格线改成 70 分,统计 70 分及以上人数,并输出所有不及格成绩。

scores = [78, 92, 56, 88, 61]
cnt = 0
for s in scores:
    if s >= 70:
        cnt += 1
    else:
        print("不及格:", s)
print("70分以上人数:", cnt)
📐 进阶语法(下面几道题要用到,先学会再练)
  • n % 2 == 0 —— % 是「取余数」:n 除以 2 余 0 就是偶数,余 1 就是奇数。例:10 % 2 == 0 为真,7 % 2 == 1 为真。
  • len(文本)len(列表) —— 返回长度 / 个数。例:len("hello") 得 5,len([1,2,3]) 得 3。
  • max(列表) / min(列表) —— 直接返回最大值 / 最小值。例:max([78,92,56]) 得 92。
  • range(1, 11) —— 生成 1~10(左闭右开,结尾要 +1 才是 10)。配 for i in range(1,11): 遍历。
🎯 再练几道(每题先点「🔑 参考思路」看讲解,再自己写一遍)
  • ① 给定 nums=[45,72,33,88,90],统计 ≥ 80 的有几个。
    计数三步走:清零 → 循环里 if n>=80 就 +1 → 打印。
    nums=[45,72,33,88,90]
    c=0
    for n in nums:
        if n>=80:
            c+=1
    print("≥80的个数:",c)   # 结果 3
  • ② 遍历 1 到 10,打印所有偶数。
    range(1,11) 遍历,n%2==0 即偶数。
    for i in range(1,11):
        if i%2==0:
            print(i)   # 2 4 6 8 10
  • ③ 统计一个字符串列表中长度 > 3 的单词个数。
    len(w) 求每个词长度,>3 就计数。
    words=["cat","apple","dog","banana"]
    c=0
    for w in words:
        if len(w)>3:
            c+=1
    print("长度>3的词数:",c)   # 结果 2
  • ④ 给定成绩,输出最高分、最低分。
    直接用内置 max() / min()
    scores=[78,92,56,88,61]
    print("最高分:",max(scores))   # 92
    print("最低分:",min(scores))   # 56
  • ⑤ 把列表 [1,2,3,4,5,6] 中奇数打印出来,偶数跳过。
    n%2==1 是奇数就打印;偶数用 continue 跳过(或直接 if 只打印奇数)。
    nums=[1,2,3,4,5,6]
    for n in nums:
        if n%2==1:
            print(n)   # 1 3 5

▶️ 在线运行:阶段 2 · 条件、循环与计数

阶段 2 · 条件、循环与计数
(点击运行查看结果)

🧩 综合闯关 · 阶段 1-2(变量 + 列表 + 条件循环)

给定成绩列表,要求:① 用 print 输出总人数 ② 统计及格/不及格人数 ③ 若及格人数超过总数一半,打印「通过率高」。

scores = [88, 45, 92, 60, 35, 78]
# 1. 量长度
n = len(scores)
print("总人数:", n)

# 2. 计数器
ok = 0
for s in scores:
    if s >= 60:
        ok += 1
    else:
        print("不及格:", s)

print("及格人数:", ok)

# 3. len 必须先有,才能判断
if ok > n / 2:
    print("通过率高")
else:
    print("通过率一般")

💡 考点:变量、列表、for、if/else、计数器、len 判断。

阶段 3 ⭐⭐字符串、列表与函数(华必达第 2 关)

题目:筛选列表里的 Python 文件(忽略大小写 .PY/.py 都算),并升级成通用筛选函数。关键英文:def=define/定义,return=返回(交回结果),lower=变小写,endswith=以…结尾,append=追加。

📐 语法卡 · 本关必背格式
  • def 函数名(参数): —— 定义一个可复用的代码块,参数就是"输入原料"
  • return 结果 —— 把算好的结果交回给调用处(没有 return 函数不返回东西)
  • 字符串.lower() —— 把字符串全部转成小写,实现"大小写不敏感"
  • 字符串.endswith("后缀") —— 判断字符串是否以指定后缀结尾,返回 True/False
  • 列表.append(元素) —— 把元素加进列表末尾
files = ["lesson1.PY", "lesson2.py", "photo.jpg", "readme.TXT", "exercise.py"]

# 必做:返回所有 Python 文件(忽略大小写)
def find_python_files(files):          # def=定义函数;files 是参数(输入)
    result = []                        # 先准备一个空列表装结果
    for name in files:
        if name.lower().endswith(".py"):  # lower=变小写; endswith=以...结尾
            result.append(name)        # append=追加(加进列表末尾)
    return result                      # return=把结果交回去

# 挑战:通用筛选(同一个函数既能筛 .py 也能筛 .txt)
def find_files(files, extension):
    result = []
    for name in files:
        if name.lower().endswith(extension.lower()):
            result.append(name)
    return result

print("Python 文件:", find_python_files(files))
print("文本文件:", find_files(files, ".txt"))

📖 逐行解释

  1. def 像"榨汁机":放进原料(files),里面处理,最后 return 吐出果汁(结果)。
  2. name.lower() 先把 "lesson1.PY" 变成 "lesson1.py",再判断是否以 ".py" 结尾,这样 .PY 也能识别。
  3. result = [] 是空结果盒,用 .append() 把符合要求的名字一个个装进去。
  4. 挑战版把扩展名也 .lower(),所以调用时写 ".py" 或 ".txt" 都能用。
🧠 记忆口诀:「函数像榨汁机:def 造机器,参数进料口,return 出果汁。lower 先变小写,endswith 看尾巴。」
🧾 阶段 3 规则卡
  • 函数像一台机器:用 def 函数名(参数): 造机器,参数就是进料口。
  • return 是出口:把结果「吐」出来;没 return 函数只是执行,不会给你返回值。
  • 字符串方法要加小括号.lower().strip().split(","),括号不能丢。
  • 比较时先统一大小写:文件名判断用 name.lower().endswith(".py"),避免 .PY 漏掉。
🤝 联手案例 · 变式练习

写一个函数 count_py(files),只返回 Python 文件的数量(不是列表)。

files = ["a.py", "b.txt", "c.PY", "d.md"]
def count_py(files):
    n = 0
    for name in files:
        if name.lower().endswith(".py"):
            n += 1
    return n
print("Python 文件数:", count_py(files))
🎯 再练几道(不同类型)
  • 写一个函数 get_initials(name) 把姓名首字母取出来(如 "张三"→"ZS")。
  • 把字符串 " Hello World " 去掉首尾空格并转成大写。
  • 用 split 把 "苹果,香蕉,橙子" 切成列表并打印。
  • 写一个函数,输入字符串,返回它是不是以 ".jpg" 结尾(不区分大小写)。
  • 把文件名 "Report.FINAL.PDF" 变成全小写并判断是否以 ".pdf" 结尾。

▶️ 在线运行:阶段 3 · 字符串、列表与函数

阶段 3 · 字符串、列表与函数
(点击运行查看结果)

阶段 4 ⭐⭐文件夹遍历与分类统计(华必达第 3 关)

题目:遍历一个文件夹,按扩展名把文件分成 image/text/web/other 四类并计数。关键英文:import=导入(拿工具),os=操作系统,listdir=列出目录,splitext=split extension/拆分扩展名。

📐 语法卡 · 本关必背格式
  • import 模块名 —— 引入一个工具包,才能使用里面的功能(如 import os)
  • os.listdir(文件夹) —— 返回该文件夹里所有文件名的列表
  • _, 后缀 = os.path.splitext(文件名) —— 把"名字.后缀"切开,_ 接前半段(不要),后缀 接 .jpg 这类
  • os.path.join(路径, 名) —— 用系统正确方式拼接路径(Windows/Linux 都安全)
import os   # import=导入;os 是操作系统模块(处理文件和文件夹)

# 先造一个虚拟文件夹和示例文件,模拟真实环境
os.makedirs("./files", exist_ok=True)   # makedirs=建目录; exist_ok=True 已存在也不报错
for name in ["a.jpg", "b.PNG", "c.gif", "note.txt", "index.html", "script.py"]:
    open(os.path.join("./files", name), "w", encoding="utf-8").close()

# 核心:按扩展名分类统计
def scan_materials(folder):
    counts = {"image": 0, "text": 0, "web": 0, "other": 0}
    for filename in os.listdir(folder):       # listdir=列出文件夹内所有文件名
        _, ext = os.path.splitext(filename)   # splitext=切开文件名和后缀; _ 表示"我不要前半段"
        ext = ext.lower()
        if ext in {".jpg", ".jpeg", ".png", ".gif"}:
            counts["image"] += 1
        elif ext in {".txt", ".md"}:
            counts["text"] += 1
        elif ext in {".html", ".htm"}:
            counts["web"] += 1
        else:
            counts["other"] += 1
    return counts

result = scan_materials("./files")
print("图片/文本/网页/其他:", result)

📖 逐行解释

  1. import os 后才有 os.listdir / os.path 等文件操作能力。
  2. os.path.splitext("a.jpg") 返回 ("a", ".jpg");用 _, ext 接收,下划线 _ 是约定"这截我不用"。
  3. ext in {".jpg",".png"} 用集合判断扩展名,比一长串 or 更干净。
  4. 字典 counts 保存各类数量,满足哪类就 counts[类名] += 1。
🧠 记忆口诀:「splitext 一刀切,名字后缀两边分;下划线 _ 不要的,小写 lower 再比对。」
🧾 阶段 4 规则卡
  • 遍历文件夹用 os.listdir("路径"),它返回该目录下所有文件/文件夹的名字列表。
  • 拆分文件名和后缀用 os.path.splitext(name),返回 ("名字", ".后缀")
  • 拼接路径用 os.path.join(目录, 文件名),Windows 和 Mac/Linux 都能用。
  • 判断类别前先 lower():防止 .JPG.jpg 被当成两种格式。
🤝 联手案例 · 变式练习

统计一个文件夹里一共有多少个 .py 文件(用刚学的遍历)。

import os
os.makedirs("./code", exist_ok=True)
for n in ["x.py", "y.txt", "z.py"]:
    open(os.path.join("./code", n), "w").close()
cnt = 0
for f in os.listdir("./code"):
    if f.lower().endswith(".py"):
        cnt += 1
print("py 文件数:", cnt)
📐 进阶语法(下面几道题要用到,先学会再练)
  • os.rename(旧名, 新名) —— 给文件改名;配合 os.path.splitext 把后缀换成 .bak。
  • os.path.isfile(路径) / os.path.isdir(路径) —— 判断是「文件」还是「文件夹」,返回 True/False。
  • max(列表, key=len) —— 按「长度」找最长的;key=len 表示比的是长度而非大小。
🎯 再练几道(每题先点「🔑 参考思路」看讲解,再自己写一遍)
  • ① 遍历 ./files 目录,把所有 .txt 文件改名为 .bak。
    用 splitext 拆后缀,再 os.rename 改名。
    import os
    for name in os.listdir("./files"):
        if name.lower().endswith(".txt"):
            base, _ = os.path.splitext(name)
            os.rename(os.path.join("./files", name),
                      os.path.join("./files", base + ".bak"))
  • ② 统计当前目录下文件总数和文件夹总数。
    用 isfile / isdir 判断每个条目。
    import os
    files = dirs = 0
    for name in os.listdir("."):
        if os.path.isfile(name): files += 1
        elif os.path.isdir(name): dirs += 1
    print("文件:", files, "文件夹:", dirs)
  • ③ 找出当前目录下文件名最长的文件并打印。
    max 配合 key=len 按长度取最大。
    import os
    names = os.listdir(".")
    longest = max(names, key=len)
    print("最长文件名:", longest, "长度:", len(longest))
  • ④ 遍历 ./files,按 .jpg / .png / 其他 三类分别计数。
    三类各自独立的 if/elif 判断。
    import os
    jpg = png = other = 0
    for name in os.listdir("./files"):
        _, ext = os.path.splitext(name); ext = ext.lower()
        if ext == ".jpg": jpg += 1
        elif ext == ".png": png += 1
        else: other += 1
    print("jpg:", jpg, "png:", png, "其他:", other)
  • ⑤ 把 ./files 下所有 .txt 文件路径打印出来(用 os.path.join 拼接)。
    join 拼出完整路径再打印。
    import os
    for name in os.listdir("./files"):
        if name.lower().endswith(".txt"):
            print(os.path.join("./files", name))

▶️ 在线运行:阶段 4 · 文件夹遍历与分类统计

阶段 4 · 文件夹遍历与分类统计
(点击运行查看结果)

🧩 综合闯关 · 阶段 1-4(字符串 + 函数 + 文件分类)

写一个函数 count_files(folder, ext),统计指定文件夹里指定后缀的文件数量(不区分大小写),并返回结果。

import os

def count_files(folder, ext):
    """统计 folder 下后缀为 ext 的文件个数(ext 如 .py)"""
    n = 0
    for name in os.listdir(folder):
        # 反取后缀并统一小写
        _, e = os.path.splitext(name)
        if e.lower() == ext.lower():
            n += 1
    return n

# 测试:在当前目录统计 .py 文件
print("py 文件数:", count_files(".", ".py"))

💡 考点:def 函数、return、os.listdir、os.path.splitext、.lower()、计数器、for/if。

🧾 这一题的必背写法
  • 函数格式:def 名字(参数1, 参数2):,下一行缩进。
  • 取后缀固定套路:_, ext = os.path.splitext(name),下划线表示「名字我不要」。
  • 不区分大小写:两边都 .lower() 后再比较。
  • 循环外清零,循环内加 1,函数末尾 return。

阶段 5 ⭐⭐NumPy 数组:批量计算的神器

NumPy 是人工智能必用的"数组计算库"。它把数据排成方格纸,能一次性对整个表做运算,比一个一个循环快得多。关键英文:array=数组,shape=形状,axis=轴(方向),max=最大,arg=参数/下标。

📐 语法卡 · 本关必背格式
  • import numpy as np —— 导入 NumPy 并起小名 np(行业约定,必背)
  • np.array([[...],[...]]) —— 用嵌套列表创建二维数组(多行多列)
  • 数组.shape —— 查看数组是几行几列,返回 (行数, 列数)
  • 数组[行, 列] —— 按位置取元素,编号从 0 开始
  • np.max(数组) / np.argmax(数组) —— 求最大值 / 求最大值所在的位置下标
import numpy as np   # numpy 是"数组计算库";np 是大家约定的小名(缩写)

# 创建数组(像一张方格纸,用 [行, 列] 定位)
a = np.array([[1, 2, 3],
              [4, 5, 6]])
print("数组内容:\n", a)
print("形状(几行几列):", a.shape)   # shape=形状
print("第0行第1列:", a[0, 1])        # 取 2

# 数组运算:整张表一次性算,不用写循环
print("全部乘 10:\n", a * 10)
print("每列求和:", a.sum(axis=0))    # axis=0 按列;axis=1 按行

# 找最大值和位置
m = np.array([3, 9, 1, 7])
print("最大值:", np.max(m))          # max=最大
print("最大值位置:", np.argmax(m))   # argmax=最大值的"下标"

# 变形:把 1 行 9 列 改成 3 行 3 列
flat = np.array([1,2,3,4,5,6,7,8,9])
print("重塑为3x3:\n", flat.reshape(3, 3))

📖 逐行解释

  1. np.array(...) 把列表变成 NumPy 数组,支持整体运算。
  2. a.shape 告诉你尺寸,如 (2, 3) 表示 2 行 3 段。
  3. a * 10 会把每个格子都乘 10,不用写 for 循环——这就是 NumPy 的强大之处。
  4. np.argmax 返回"最大值在第几个位置",后面做图像分类、找最像的标签会用到。
🧠 记忆口诀:「np 是 NumPy 小名;数组像方格纸,[行,列] 定位;整表算不写循环,argmax 找状元。」
🧾 阶段 5 规则卡
  • 数组是一群同类型的数,用 np.array([...]) 创建,比 Python 列表算得快。
  • reshape 改变形状arr.reshape(行, 列),总个数必须不变。
  • 整表运算不用写循环arr + 10 会给每个元素都加 10。
  • argmax 找最大值的「位置」,max 找最大值本身。
🤝 联手案例 · 练手:像素平均

一张 2x2 的灰度图(数值=亮度),求整张图的平均亮度。

import numpy as np
img = np.array([[100, 120],
                [80, 200]])
print("平均亮度:", img.mean())   # mean=平均值
📐 进阶语法(下面几道题要用到,先学会再练)
  • np.zeros((行, 列)) —— 创建全 0 数组(dtype 可指定 int/float)。
  • np.random.rand(n) —— 生成 n 个 0~1 之间的随机小数。
  • 对角线赋值:用下标 a[i, i] = 1 逐格填,或 np.fill_diagonal(a, 1) 一键填。
🎯 再练几道(每题先点「🔑 参考思路」看讲解,再自己写一遍)
  • ① 创建数组 [1,2,3,4,5,6],reshape 成 2 行 3 列。
    reshape 总个数不变(6=2×3)。
    import numpy as np
    a = np.array([1,2,3,4,5,6])
    print(a.reshape(2, 3))
  • ② 生成 10 个 0 到 1 之间的随机数并求平均值。
    np.random.rand 出随机数组,用 .mean() 求平均。
    import numpy as np
    r = np.random.rand(10)
    print("随机数:", r)
    print("平均值:", r.mean())
  • ③ 找出数组 [12,5,8,21,3] 中最大值的位置。
    argmax 返回「下标」不是值。
    import numpy as np
    print("最大值位置:", np.argmax([12,5,8,21,3]))  # 得 3(第4个)
  • ④ 创建一个 3x3 全 0 数组,再把对角线改成 1。
    先 zeros,再用下标 i,i 填 1。
    import numpy as np
    a = np.zeros((3,3), dtype=int)
    for i in range(3):
        a[i, i] = 1
    print(a)   # 对角线为 1
  • ⑤ 把数组 [10,20,30,40] 每个元素都除以 10,看结果。
    整表运算,不用写循环。
    import numpy as np
    a = np.array([10,20,30,40])
    print(a / 10)   # [1. 2. 3. 4.]

▶️ 在线运行:阶段 5 · NumPy 数组基础

阶段 5 · NumPy 数组基础
(点击运行查看结果)

🧩 综合闯关 · 阶段 1-5(列表 + 循环 + NumPy 批量计算)

有一组成绩,先过滤掉 0 分(缺考),再求平均分、最高分、最低分。

import numpy as np

scores = [78, 0, 92, 56, 0, 88, 61]

# 1. 用 Python 列表先过滤(还没学到 Pandas 时)
clean = []
for s in scores:
    if s != 0:            # != 表示"不等于"
        clean.append(s)   # append 把元素塞到列表末尾

print("有效成绩:", clean)

# 2. 转成 NumPy 数组做批量统计
arr = np.array(clean)
print("平均分:", arr.mean())
print("最高分:", arr.max())
print("最低分:", arr.min())

💡 考点:列表过滤、for/if、append、np.array、mean/max/min。

🧾 这一题的必背写法
  • 新建空列表:clean = []
  • 往列表加东西:clean.append(值)
  • "不等于"写 !=,不是 <>
  • NumPy 数组算整表:先 np.array(列表),再调方法。

阶段 6 ⭐⭐⭐字典、JSON 与异常处理(华必达第 4 关)

题目:读取标注结果文件 labels.json,统计每个标签出现次数并保存为 count.json,同时处理"文件不存在/格式错误"。关键英文:json=数据交换格式,try/except=试一试/救一救,open=打开,dump/load=倒出/读入,get=取。

📐 语法卡 · 本关必背格式
  • import json —— 导入 JSON 模块才能读写 .json 文件
  • with open(路径, "r", encoding="utf-8") as f: —— 打开文件读(r)/写(w),with 结束自动关闭
  • json.load(f) —— 从文件把 JSON 读成 Python 的列表/字典
  • json.dump(对象, f, ensure_ascii=False, indent=2) —— 把 Python 对象写进 JSON;ensure_ascii=False 保中文
  • try: ... except 错误名: —— try 里可能出错,except 捕获指定错误并优雅地处理
import json   # json 是一种"键值对"文本格式,常用于存标注结果

# 先造一份示例标注文件 labels.json
sample = [
    {"name": "img001.jpg", "label": "cat"},
    {"name": "img002.jpg", "label": "dog"},
    {"name": "img003.jpg", "label": "cat"},
    {"name": "img004.jpg", "label": "cat"},
    {"name": "img005.jpg", "label": "dog"}
]
with open("labels.json", "w", encoding="utf-8") as f:   # with=自动关文件
    json.dump(sample, f, ensure_ascii=False, indent=2)  # dump=倒出(写入)

# 核心:读文件→统计每个标签次数→保存结果(带异常处理)
def count_labels(path):
    try:                              # try=试一试
        with open(path, "r", encoding="utf-8") as f:
            data = json.load(f)      # load=读入
    except FileNotFoundError:        # except=如果出错就救场
        print("文件不存在:", path)
        return {}
    except json.JSONDecodeError:
        print("JSON 格式错误")
        return {}

    counts = {}
    for item in data:
        label = item.get("label", "未知")     # get=取,没有就给默认值"未知"
        counts[label] = counts.get(label, 0) + 1
    return counts

def save_counts(counts, out_path):
    with open(out_path, "w", encoding="utf-8") as f:
        json.dump(counts, f, ensure_ascii=False, indent=2)

counts = count_labels("labels.json")
save_counts(counts, "count.json")
print("统计结果:", counts)
print("--- count.json 内容 ---")
print(open("count.json", encoding="utf-8").read())

📖 逐行解释

  1. try/except 是"安全网":文件缺失或格式坏掉时,程序不会崩溃,而是打印提示并返回空字典。
  2. with open 不用手动 f.close(),用完自动关,最稳妥。
  3. item.get("label", "未知") 防止某些数据缺 label 键导致报错。
  4. counts.get(label, 0) 第一次遇到某标签时默认从 0 起算再 +1。
🧠 记忆口诀:「try 试一试,except 救一救;with 开门自动关,get 取值有兜底,dump 写中文加 ensure_ascii=False。」
🧾 阶段 6 规则卡
  • JSON 是「字符串版的字典」,适合存文件;用 json.load(f) 读,json.dump(obj, f) 写。
  • 写中文要加 ensure_ascii=False,否则中文会变成 \uXXXX 乱码。
  • 用 with open 自动关门,不用手动写 f.close()。
  • try/except 是「保险」:try 里放可能出错的代码,except 里放出错后的处理。
🤝 联手案例 · 变式练习

读取上面的 labels.json,只统计出 "cat" 标签出现了几次。

import json
data = json.load(open("labels.json", encoding="utf-8"))
n = 0
for item in data:
    if item.get("label") == "cat":
        n += 1
print("cat 出现:", n, "次")
🎯 再练几道(不同类型)
  • 读取一个 JSON 文件,若文件不存在则打印"文件未找到"。
  • 把字典 {"a":1,"b":2} 写入 data.json,并验证能读回来。
  • 写一段代码:尝试把 input 转成整数,失败时提示请输入数字。
  • 读取 JSON 标注文件,统计每个类别出现的次数并打印。
  • 把字典写入 JSON,再用 with open 读回来,验证内容一致。

▶️ 在线运行:阶段 6 · 字典、JSON 与异常处理

阶段 6 · 字典、JSON 与异常处理
(点击运行查看结果)

阶段 7 ⭐⭐⭐Pandas:像用 Excel 一样处理数据

Pandas 是人工智能训练师处理表格数据最常用工具,能读 csv、清洗空值、按组算统计。关键英文:DataFrame=数据框(整张表),Series=一列,read_csv=读表格,dropna=丢空值,groupby=分组。

📐 语法卡 · 本关必背格式
  • import pandas as pd —— 导入并起小名 pd(必背)
  • pd.read_csv("文件.csv") —— 读取 CSV 文件成 DataFrame 表格
  • df.head() —— 查看前几行,快速预览数据
  • df.dropna() —— 删除含有空值(NaN)的行,数据清洗第一招
  • df.groupby("列")["数值列"].mean() —— 按某列分组,对数值列求平均
import pandas as pd   # pandas 是"表格处理库";pd 是约定小名

# 用字典造一张小表(模拟成绩单 csv)
data = {
    "name": ["小明", "小红", "小刚", "小美", "小强"],
    "class": ["A", "A", "B", "B", "A"],
    "score": [88, 92, None, 75, 60]   # None=空值(缺失)
}
df = pd.DataFrame(data)   # DataFrame=二维表格(像 Excel)
print("=== 原表 ===")
print(df)

# 数据清洗:删掉有空值的行
df_clean = df.dropna()    # dropna=丢掉空值
print("\n=== 清洗后(删空行) ===")
print(df_clean)

# 按班级分组,算每个班的平均分
avg = df.groupby("class")["score"].mean()   # groupby=分组; mean=平均
print("\n=== 各班平均分 ===")
print(avg)

📖 逐行解释

  1. pd.DataFrame(data) 把字典变成一张带列名的表。
  2. None 表示缺失值;dropna() 直接删掉含缺失的行(清洗脏数据)。
  3. groupby("class") 按班级把行分成几组,再对 score 求 mean(平均)。
  4. 实际考试常给 .csv 文件,你只需 df = pd.read_csv("成绩.csv") 就能开始处理。
🧠 记忆口诀:「DataFrame 是整张 Excel 表;dropna 丢空行,fillna 填空洞;groupby 分组算账,mean 一求平均。」
🧾 阶段 7 规则卡
  • DataFrame 就是表格,行是记录,列是字段;用 df["列名"] 取一列。
  • 缺失值处理df.isnull() 查空洞,df.dropna() 删空行,df.fillna(值) 填空。
  • 分组统计df.groupby("分类列")["数值列"].mean(),先分组再算账。
  • 读 csv 用 pd.read_csv("文件"),读 Excel 用 pd.read_excel("文件")
🤝 联手案例 · 练手:算总分

读取上面的 df,给每人加一列"加分"=10,再算所有人 score 的总和(提示:用 df["score"].sum())。

import pandas as pd
df = pd.DataFrame({"name":["甲","乙","丙"], "score":[80,90,70]})
df["bonus"] = 10
print(df)
print("总分:", df["score"].sum())   # sum=求和
📐 进阶语法(下面几道题要用到,先学会再练)
  • df.drop_duplicates() —— 整张表去重;df["列"].drop_duplicates() 对某列去重。
  • 新列带条件:用 np.where(条件, 满足值, 否则值) 批量判断(可嵌套)。
  • df.to_excel("文件.xlsx", index=False) —— 导出 Excel(考试环境一般已装 openpyxl)。
🎯 再练几道(每题先点「🔑 参考思路」看讲解,再自己写一遍)
  • ① 读取 data.csv,删除所有缺失值所在的行。
    dropna 删空行(本关已学)。
    import pandas as pd
    df = pd.read_csv("data.csv")
    df_clean = df.dropna()
    print(df_clean)
  • ② 按"班级"分组,计算"成绩"的平均分。
    groupby + mean(本关已学)。
    import pandas as pd
    avg = df.groupby("班级")["成绩"].mean()
    print(avg)
  • ③ 把 DataFrame 中某列的重复行去掉。
    用 drop_duplicates 去重。
    import pandas as pd
    uniq = df["某列"].drop_duplicates()
    print(uniq)
  • ④ 给 DataFrame 新增一列 "等级":score>=90 为优秀,60-89 为及格,否则不及格。
    用 np.where 嵌套判断。
    import pandas as pd, numpy as np
    df["等级"] = np.where(df["score"]>=90, "优秀",
                  np.where(df["score"]>=60, "及格", "不及格"))
    print(df)
  • ⑤ 把清洗后的 DataFrame 保存为 Excel 文件。
    to_excel 导出,index=False 不导出行号。
    import pandas as pd
    df.to_excel("clean.xlsx", index=False)
    print("已保存")

▶️ 在线运行:阶段 7 · Pandas 数据清洗与分组

阶段 7 · Pandas 数据清洗与分组
(点击运行查看结果)

🧩 综合闯关 · 阶段 1-7(CSV + Pandas 清洗 + 统计)

读取 CSV,删除缺失行,按城市分组求平均成绩,并保存结果。

import pandas as pd

# 假设已有 data.csv,这里用字符串模拟
from io import StringIO
csv_text = """name,city,score
小李,深圳,88
小王,广州,92
小张,深圳,75
小赵,北京, """

df = pd.read_csv(StringIO(csv_text))     # 读入表格
print("原始行数:", len(df))

df = df.dropna()                          # 删除有空值的行
print("清洗后行数:", len(df))

result = df.groupby("city")["score"].mean()  # 按城市分组算平均
print(result)

# 保存
df.to_csv("clean.csv", index=False)
print("已保存 clean.csv")

💡 考点:pd.read_csv、dropna、groupby、mean、to_csv、len 判断。

🧾 这一题的必背写法
  • 读 CSV:df = pd.read_csv("文件")
  • 删空行:df = df.dropna()(注意要重新赋值给 df)。
  • 分组求平均:df.groupby("分类列")["数值列"].mean()
  • 保存:df.to_csv("新文件", index=False),index=False 防止多出一列序号。

阶段 8 ⭐⭐⭐图片读取与多图显示(华必达第 5 关 · 浏览器演示版)

题目:用 OpenCV 读图→转 RGB→Matplotlib 显示;挑战批量读取并显示。因浏览器装不了 OpenCV,下面用 NumPy 造两张模拟图演示显示流程。关键英语:imread=读图,cvtColor=转换颜色,imshow=显示图,subplot=子图。

📐 语法卡 · 本关必背格式(本地 VS Code 用)
  • cv2.imread(路径) —— OpenCV 读图,默认是 BGR(蓝绿红) 顺序
  • cv2.cvtColor(img, cv2.COLOR_BGR2RGB) —— 把 BGR 转成 RGB,否则颜色发蓝发紫
  • plt.imshow(图) —— 用 Matplotlib 把数组/图片画出来
  • plt.subplot(行, 列, 位置) —— 把画面分成几格,指定当前画哪一格
# 本地真实写法(复制到 VS Code 运行):
import cv2, glob
import matplotlib.pyplot as plt
img = cv2.imread("data/cat.jpg")          # 读图(BGR)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 转 RGB
plt.imshow(img_rgb); plt.axis("off"); plt.show()

# 批量显示
files = sorted(glob.glob("data/*.jpg"))   # glob=按通配符找文件
fig, axes = plt.subplots(1, len(files), figsize=(12,4))
for ax, p in zip(axes, files):
    ax.imshow(cv2.cvtColor(cv2.imread(p), cv2.COLOR_BGR2RGB))
    ax.axis("off")
plt.show()

📖 逐行解释

  1. OpenCV 默认 BGR 顺序,而 Matplotlib 按 RGB 显示,所以必须 cvtColor 转换,否则图片发蓝。
  2. cv2.imread 失败返回 None,正式代码要加 if img is None 判断。
  3. plt.subplots(1, N) 一行 N 列,配合 for 循环把每张图塞进不同子图。
  4. 下面浏览器演示版用 NumPy 造图,道理完全一样:imshow 负责显示。
🧠 记忆口诀:「OpenCV 顺序是 BGR(蓝绿红),显示前翻成 RGB;imshow 画图,axis off 去坐标,subplot 分格排。」
🧾 阶段 8 规则卡
  • OpenCV 默认读图顺序是 BGR(蓝绿红),Matplotlib 要 RGB,所以显示前要做 cvtColor 转换。
  • 图片本质是数组:彩色图是 (高, 宽, 3) 的三维数组,灰度图是二维。
  • 浏览器里不能装 OpenCV,本关先用 NumPy 模拟流程;真实图片请复制代码到本地 VS Code 跑。
🤝 联手案例 · 变式练习

用 NumPy 造一张 50x50 的全蓝图片(三通道都设蓝=255)。

import numpy as np
import matplotlib.pyplot as plt
blue = np.zeros((50, 50, 3), dtype=np.uint8)
blue[:, :, 2] = 255      # 第3通道(蓝)全亮
plt.imshow(blue); plt.axis("off"); plt.show()
📐 进阶语法(下面几道题要用到,先学会再练)
  • np.random.rand(高, 宽) —— 造一张随机灰度图(值 0~1)。
  • 取通道:img[:, :, 0]=蓝(B)、[:,:,1]=绿(G)、[:,:,2]=红(R)(OpenCV 是 BGR 顺序)。
  • 裁剪:img[行起:行止, 列起:列止] 切出一块区域。
🎯 再练几道(每题先点「🔑 参考思路」看讲解,再自己写一遍)
  • ① 用 NumPy 创建一个 100×100 的随机灰度图并显示。
    rand 造图,cmap="gray" 灰度显示。
    import numpy as np, matplotlib.pyplot as plt
    img = np.random.rand(100, 100)
    plt.imshow(img, cmap="gray"); plt.show()
  • ② 把一张彩色图的红、绿、蓝三个通道分别打印出来。
    用 cv2.split 或下标切片取通道。
    import cv2
    b, g, r = cv2.split(img)   # 或 img[:,:,0] 等
    print("蓝通道:\n", b)
  • ③ 把图片从中心裁剪出 100×100 区域并保存。
    先算中心起点,再切片。
    import numpy as np
    h, w = img.shape[:2]; s = 100
    top, left = (h-s)//2, (w-s)//2
    crop = img[top:top+s, left:left+s]
  • ④ 用 NumPy 生成一张 200x200 的灰度渐变图并显示。
    用 linspace + tile 做横向渐变。
    import numpy as np, matplotlib.pyplot as plt
    x = np.linspace(0, 1, 200)
    grad = np.tile(x, (200, 1))
    plt.imshow(grad, cmap="gray"); plt.show()
  • ⑤ 解释为什么 OpenCV 读取的图片直接用 plt.imshow 会发蓝。
    OpenCV 是 BGR,matplotlib 按 RGB 显示,顺序反了。
    import cv2
    img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 转成 RGB 再 imshow

▶️ 在线运行:阶段 8 · 图片显示流程(浏览器模拟)

阶段 8 · 图片显示流程(浏览器模拟)
(点击运行查看结果)

阶段 9 ⭐⭐⭐数据可视化:Matplotlib 画图

画图能让数据"一眼看懂"。Matplotlib 是最常用绘图库:柱状图比大小、散点图看关系、子图拼一起。关键英文:plot=画线,bar=柱,scatter=散点,title/label=标题/标签,subplot=子图。

📐 语法卡 · 本关必背格式
  • plt.figure(figsize=(宽,高)) —— 新建一张画布并指定尺寸
  • plt.bar(x, y) —— 画柱状图,x 是类别,y 是数值
  • plt.scatter(x, y) —— 画散点图,看两个变量的关系
  • plt.subplot(行, 列, 位置) —— 把画面分成网格,定位当前子图
  • plt.title / xlabel / ylabel —— 设置标题和坐标轴名称
import matplotlib.pyplot as plt
import numpy as np

# 准备数据
names = ["小明", "小红", "小刚", "小美"]
scores = [88, 92, 75, 81]

# 1) 柱状图
plt.figure(figsize=(6,4))
plt.bar(names, scores, color="#0ea5e9")   # bar=柱状
plt.title("成绩柱状图"); plt.ylabel("分数")
plt.show()

# 2) 散点图(身高 vs 体重)
h = [160, 170, 165, 175, 168]
w = [55, 68, 60, 72, 63]
plt.figure(figsize=(6,4))
plt.scatter(h, w, color="#ef4444")        # scatter=散点
plt.title("身高-体重散点"); plt.xlabel("身高"); plt.ylabel("体重")
plt.show()

# 3) 子图:一行两列,左柱右散
fig, axes = plt.subplots(1, 2, figsize=(10,4))
axes[0].bar(names, scores, color="#0ea5e9"); axes[0].set_title("柱状")
axes[1].scatter(h, w, color="#ef4444"); axes[1].set_title("散点")
plt.tight_layout(); plt.show()

📖 逐行解释

  1. plt.bar 适合"分类对比"(谁高谁低一看便知)。
  2. plt.scatter 适合"两个变量是否相关"(点越斜越相关)。
  3. plt.subplots(1,2) 一行两列,axes[0]、axes[1] 分别操作左右两格。
  4. 每次 plt.show() 输出一张图;平台运行器会把图直接显示在下方。
🧠 记忆口诀:「bar 柱比高低,scatter 点看关系;figure 先铺纸,subplot 分格子,title/label 写名字。」
🧾 阶段 9 规则卡
  • plt.plot 画折线,plt.bar 画柱子,plt.scatter 画散点
  • 画图前先铺纸 plt.figure(),分格子用 plt.subplot(行, 列, 第几个)
  • 一定要写标题和轴标签plt.title()plt.xlabel()plt.ylabel()
  • show() 才会把图显示出来,只画图不 show 等于白画。
🤝 联手案例 · 练手:折线图

用 plt.plot 画一条"天数 1-5 对应学习时长 [1,2,3,5,8]"的折线,并加标题。

import matplotlib.pyplot as plt
days = [1,2,3,4,5]
hours = [1,2,3,5,8]
plt.plot(days, hours, marker="o", color="#16a34a")
plt.title("每日学习时长"); plt.xlabel("天数"); plt.ylabel("小时")
plt.show()
📐 进阶语法(下面几道题要用到,先学会再练)
  • plt.pie(数据, labels=标签) —— 画饼图展示占比。
  • fig, axs = plt.subplots(2, 2) —— 排成 2 行 2 列的子图,用 axs[行,列].plot(...) 画。
🎯 再练几道(每题先点「🔑 参考思路」看讲解,再自己写一遍)
  • ① 用 matplotlib 画一条 y=x² 的曲线。
    arange 造 x,直接 x**2。
    import numpy as np, matplotlib.pyplot as plt
    x = np.arange(0, 11)
    plt.plot(x, x**2); plt.show()
  • ② 给柱状图添加标题、x轴和y轴标签。
    用 title / xlabel / ylabel。
    import matplotlib.pyplot as plt
    plt.bar(["A","B","C"],[3,7,5])
    plt.title("标题"); plt.xlabel("x轴"); plt.ylabel("y轴")
    plt.show()
  • ③ 用不同颜色在同一张图里画出两条折线。
    plot 多次,用 label + legend。
    import numpy as np, matplotlib.pyplot as plt
    x = np.arange(5)
    plt.plot(x, x, label="y=x")
    plt.plot(x, x**2, label="y=x²", color="red")
    plt.legend(); plt.show()
  • ④ 画一个饼图,展示 [30, 20, 50] 的占比,并加标题。
    plt.pie 配 labels。
    import matplotlib.pyplot as plt
    plt.pie([30,20,50], labels=["甲","乙","丙"])
    plt.title("占比"); plt.show()
  • ⑤ 用 subplot 把 4 张小图排成 2 行 2 列。
    subplots(2,2) 后逐格画。
    import numpy as np, matplotlib.pyplot as plt
    x = np.arange(5)
    fig, axs = plt.subplots(2, 2)
    axs[0,0].plot(x, x)
    axs[0,1].bar([1,2,3],[3,2,1])
    axs[1,0].pie([1,1])
    axs[1,1].plot(x, x**2)
    plt.show()

▶️ 在线运行:阶段 9 · 数据可视化

阶段 9 · 数据可视化
(点击运行查看结果)

🧩 综合闯关 · 阶段 1-9(数据 + 清洗 + 可视化)

生成一组模拟成绩,统计各分数段人数,并画出柱状图。

import numpy as np
import matplotlib.pyplot as plt

# 1. 生成 30 个 0-100 的随机整数
scores = np.random.randint(0, 101, size=30)

# 2. 分桶统计(优秀/及格/不及格)
high = mid = low = 0
for s in scores:
    if s >= 90:
        high += 1
    elif s >= 60:
        mid += 1
    else:
        low += 1

print("优秀:", high, "及格:", mid, "不及格:", low)

# 3. 画图
plt.figure(figsize=(6,4))
plt.bar(["优秀", "及格", "不及格"], [high, mid, low], color=["green", "orange", "red"])
plt.title("成绩分段统计")
plt.xlabel("分数段")
plt.ylabel("人数")
plt.show()

💡 考点:np.random.randint、循环计数、plt.bar、中文标题、show。

阶段 10 ⭐⭐⭐⭐综合挑战:遍历+分类+复制+保存(华必达第 6 关)

题目:把前面所有能力串起来——遍历文件夹、挑出图片、自动建目录、复制到输出文件夹并计数;进阶做视频抽帧。关键英文:makedirs=建目录,shutil=文件操作库,copy2=复制,VideoCapture=开视频,release=释放。

📐 语法卡 · 本关必背格式
  • os.makedirs(路径, exist_ok=True) —— 递归创建多级目录;已存在也不报错
  • shutil.copy2(源, 目标) —— 复制文件并尽量保留元信息(时间戳等)
  • os.path.join(路径, 名) —— 跨平台安全地拼接路径
  • cap = cv2.VideoCapture(路径) —— 打开视频文件准备逐帧读取
  • ret, frame = cap.read() —— 读一帧;ret=False 表示读完了
import os
import shutil   # shutil=高级文件操作(复制/移动)

# 造一个源文件夹和示例图片
os.makedirs("./src", exist_ok=True)
for name in ["a.jpg", "b.png", "c.txt", "d.jpg"]:
    open(os.path.join("./src", name), "w", encoding="utf-8").close()

# 综合:遍历源文件夹 → 挑图片 → 自动建目录 → 复制 → 计数
def copy_images(src_folder, dst_folder):
    os.makedirs(dst_folder, exist_ok=True)   # makedirs=递归建目录
    count = 0
    for name in os.listdir(src_folder):
        ext = os.path.splitext(name)[1].lower()   # 取扩展名
        if ext in {".jpg", ".png"}:
            src = os.path.join(src_folder, name)
            dst = os.path.join(dst_folder, name)
            shutil.copy2(src, dst)                # copy2=复制并保留元信息
            count += 1
    print(f"已复制 {count} 张图片到 {dst_folder}")

copy_images("./src", "./output/images")
print("输出目录:", os.listdir("./output/images"))

# ---- 进阶:视频抽帧(需本地装 OpenCV,浏览器无法运行)----
# import cv2
# cap = cv2.VideoCapture("./video.mp4")   # 打开视频
# n = 0; saved = 0
# while True:
#     ret, frame = cap.read()             # 逐帧读取
#     if not ret: break                   # 读完退出
#     if n % 30 == 0:                     # 每 30 帧存一张
#         cv2.imwrite(f"./output/frame_{saved:05d}.jpg", frame)
#         saved += 1
#     n += 1
# cap.release()                           # 释放资源

📖 逐行解释

  1. os.makedirs(..., exist_ok=True) 比 mkdir 强,能一次建好多级目录,且已存在不报错。
  2. shutil.copy2 复制文件还保留原信息;复制前必须保证目标目录已存在。
  3. os.path.join 用系统正确分隔符拼路径,Windows/Linux 都通用。
  4. 视频抽帧用 cap.read() 循环,读不到就 break,结束必须 cap.release() 释放。
🧠 记忆口诀:「makedirs 建目录,exist_ok 不怕重;copy2 复制留信息,join 拼路径跨平台;视频 read 循环读,release 收尾莫忘掉。」
🧾 阶段 10 规则卡
  • 综合题 = 把前面所有工具串起来:os 遍历、字典计数、shutil 复制、异常处理、循环。
  • 先建目录再复制os.makedirs("目标目录", exist_ok=True) 防止目录已存在时报错。
  • 复制用 shutil.copy2,保留原文件信息;批量操作套在循环里。
  • 视频/真实图片必须本地跑,浏览器里没有 OpenCV。
🤝 联手案例 · 终极练手

把上面 copy_images 改成:只复制 .png 图片,且把复制数量也返回(return count)。

import os, shutil
def copy_png(src_folder, dst_folder):
    os.makedirs(dst_folder, exist_ok=True)
    count = 0
    for name in os.listdir(src_folder):
        if os.path.splitext(name)[1].lower() == ".png":
            shutil.copy2(os.path.join(src_folder, name),
                         os.path.join(dst_folder, name))
            count += 1
    return count
print("复制 png 数:", copy_png("./src", "./output/png"))
🎯 再练几道(不同类型)
  • 写一个脚本:把 ./src 目录下所有 .jpg 复制到 ./out,并统计复制了多少张。
  • 批量读取一个文件夹里的图片,统一 resize 到 128×128 后保存。
  • 写一个函数:输入文件夹路径,返回该路径下各类文件的数量字典。
  • 批量把 ./src 下所有 .png 复制到 ./png_out,.jpg 复制到 ./jpg_out,并分别计数。
  • 写一个脚本:读取视频文件,每隔 10 帧保存一张图片到 output/ 目录。

▶️ 在线运行:阶段 10 · 综合挑战(文件复制)

阶段 10 · 综合挑战(文件复制)
(点击运行查看结果)

🏆 终极综合闯关 · 阶段 0-10(全流程演练)

模拟 AI 训练师工作流:生成数据 → 清洗 → 统计 → 可视化 → 保存报告。

import os, json
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 1. 生成模拟数据
np.random.seed(0)
data = []
for i in range(20):
    data.append({
        "id": i + 1,
        "city": np.random.choice(["深圳", "广州", "北京"]),
        "score": np.random.randint(30, 101),
        "passed": None    # 待填充
    })

# 2. 标记是否及格
for row in data:
    if row["score"] >= 60:
        row["passed"] = True
    else:
        row["passed"] = False

# 3. 转成 DataFrame 并清洗
df = pd.DataFrame(data)
print("原始行数:", len(df))

# 4. 分组统计
result = df.groupby("city")["score"].mean()
print("各城市平均分:")
print(result)

# 5. 保存结果
os.makedirs("output", exist_ok=True)
df.to_csv("output/report.csv", index=False)
with open("output/report.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False, indent=2)

print("报告已保存到 output/ 目录")

# 6. 可视化
plt.figure(figsize=(6,4))
plt.bar(result.index, result.values, color=["#0ea5e9", "#22c55e", "#f59e0b"])
plt.title("各城市平均成绩")
plt.xlabel("城市")
plt.ylabel("平均分")
plt.show()

💡 考点:字典/列表、for/if、NumPy 随机数、Pandas 分组、JSON/CSV 保存、matplotlib 画图、os.makedirs。

🧾 全流程口诀
  • 数据生成:字典列表,一个样本一行。
  • 清洗/标记:for 遍历 + if 判断 + 改字段。
  • 统计分析:pd.DataFrame + groupby。
  • 保存报告:to_csv + json.dump。
  • 出图汇报:plt.bar + title/label/show。
🎉 恭喜走完融合路径! 现在你已经从「完全不会」练到了能写真题代码:变量→循环→函数→文件夹→NumPy→JSON→Pandas→图片→可视化→综合实战,全串起来了。下一步去 「四、真题精讲 → 理论填空必背」 背高频空,再去 「六、真题自测」 限时刷真实考题。

实操项目:图像处理(翻转 / 灰度)

这是「技能考核重点练习」里的核心实操:用 Python 函数 对数据(图片)进行处理。下面这个工具完全离线可用——上传一张图,点按钮看效果,旁边给出端到端讲解和它对应的Python/OpenCV 代码,帮你把「图像翻转、灰度调整」记牢。

🖼️ 在线图像处理工具(Canvas 实现,离线可用)



先点「上传图片」,或工具已自带一张示例图。每个按钮都会实时改变画面。

📖 端到端讲解(点按钮看对应代码)

👈 左边操作,这里会显示每一步「原理 + Python/OpenCV 等价代码」。
先看「水平翻转」和「转灰度」——这是考试最常考的两个图像预处理操作。

🔧 对应 Python 代码(用 OpenCV / NumPy)

import cv2
import numpy as np

img = cv2.imread("photo.jpg")          # 读图 → NumPy数组

# 1) 水平翻转(左右镜像)
flip_h = cv2.flip(img, 1)            # 1=水平, 0=垂直, -1=都翻

# 2) 灰度调整(彩色→灰阶)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 原理:Gray = 0.299·R + 0.587·G + 0.114·B

# 3) 提亮(每个像素加固定值,限幅0~255)
bright = np.clip(img.astype("int16") + 30, 0, 255).astype("uint8")

cv2.imwrite("gray.jpg", gray)        # 保存结果
✅ 记忆口诀:flip 翻转、cvtColor 变色、BGR2GRAY 转灰、clip 限幅。灰度公式权重 0.299/0.587/0.114 是「人眼对绿色最敏感」来的,选择题可能考。

🏷️ 图片标注流程(考试重点)

数据标注 = 给原始数据「贴标签」,让 AI 知道什么是什么。图像标注常见流程:

①采集图像 ②清洗(去模糊/去重) ③选工具(LabelImg/LabelMe) ④画框/描边标注 ⑤审核校验 ⑥导出数据集
  • 矩形框标注:目标检测,用 LabelImg,生成 XML。
  • 多边形/语义分割:用 LabelMe,生成 JSON。
  • 标注规范:边界模糊标最内接矩形;目标被遮挡标可见部分;背景噪声要备注
  • 质量指标(IoU):预测框与真实框的「交并比」,越大越准。

🧪 用 NumPy 实现灰度(在线跑一遍)

灰度算法演示
(点击运行查看结果)

🛠️ 实操考核详解(真实操作 + 代码联动)

五级实操不是「背理论」,而是要在 120 分钟里完成:采集→处理→清洗→标注→分类统计→系统运维→提交。下面 11 个项目覆盖 2024–2026 真题全部题型。下面每个操作点都配了工具截图步骤、可运行代码、合规检查清单。遇到代码直接点「▶ 运行」就能练。

📊 权重与分值速记(先背这个)

模块一 · 30分
采集(网页/文件/数据库/CSV日志)+ 处理(遍历统计/关键词筛选/整理归类)
模块二 · 60分
清洗(文/视/语)+ 标注(文/视/语)+ 分类统计 ← 重中之重
模块三 · 10分
系统基础操作 + 维护(日志/反馈单)
真实操 vs 理论知识区别:考场会给你一个任务单(如「把客服对话 txt 整理成 csv 并做情感标注」),你需要在电脑上用 Python/Excel/标注工具完成并保存结果。本平台用「在线运行器」模拟电脑操作;正式考试是在考场机房进行。

🚀 0 基础 → 完全学会:实操学习路径

第 1 阶段 · 3 天
过「变量/列表/字典/条件/循环/字符串/函数」基础路径,每道题点 ▶ 运行看懂输出。
第 2 阶段 · 4 天
学「文件夹遍历 / NumPy / JSON / Pandas」,重点练 os.listdirpd.read_csvjson.load
第 3 阶段 · 5 天
跟做下面 11 个项目:从 CSV 读取 → 文件遍历 → 清洗标注 → 分类统计 → 目标检测 → 图像分类 → 问答机器人配置。

💡 学习原则:先抄代码 → 再改参数 → 最后遮住答案自己写。每个项目都配了可运行代码,零基础也能边抄边懂。

模块一:数据采集和处理(30分)

1.1.1 原始业务数据采集 · 网页抓取

工具实操步骤(后羿采集器 / 八爪鱼)
  1. 打开工具 → 新建「智能模式」任务 → 粘贴目标网址。
  2. 等待工具自动识别列表/表格字段。
  3. 检查字段名,删除不需要的列,重命名中文列名。
  4. 设置采集页数 / 翻页规则(如「下一页」按钮)。
  5. 点击「开始采集」→ 导出为 Excel / CSV / JSON
后羿采集器 — 字段识别字段映射(网页 → 表格列)标题 → <h1 class="title">价格 → .price销量 → .sales开始采集左侧网页 → 右侧字段 → 导出 CSV
必会要点
  • 采集前确认是否涉及个人信息 / 版权,需做合规判断。
  • 导出文件命名规范:来源_日期_采集人.扩展名,如 客服会话_20260815_张三.csv
  • 敏感字段先脱敏再保存(手机号 → 138****5678)。

1.1.1 代码联动:把抓取的 txt 会话转成 CSV

1.1.1 代码联动 · txt → csv
(点击运行查看结果)

1.1.2 数据库内业务数据采集 · SQLite

工具实操步骤(SQLite / Navicat)
  1. 打开数据库工具 → 连接 SQLite 文件(.db/.sqlite)。
  2. 查看表结构,确认字段名和数据类型。
  3. 写单表查询:SELECT 字段 FROM 表 WHERE 条件;
  4. 执行查询 → 检查结果条数是否正确。
  5. 导出为 CSVExcel,按任务单命名保存。
Navicat — 查询结果dt store_id assistant_id message20230501 S001 A12 你好…20230501 S002 A08 在的20230501 S001 A12 价格?右键结果 → 导出 → 选 CSV
必会 SQL(五级只考单表查询)
SELECT 姓名, 年龄 FROM 用户 WHERE 年龄 > 18;
SELECT COUNT(*) FROM 订单 WHERE 状态 = '已完成';
SELECT DISTINCT 城市 FROM 客户;

1.1.2 代码联动:Python 读 SQLite 并导出 CSV

1.1.2 代码联动 · SQLite → CSV
(点击运行查看结果)

1.2.1 业务数据整理归类 · Excel / Pandas

工具实操步骤(Excel / WPS)
  1. 打开 Excel → 「数据」→「获取数据」导入 CSV/TXT。
  2. 检查编码:中文乱码时选 UTF-8GBK
  3. 去重:选中数据 → 「数据」→「删除重复值」。
  4. 处理缺失值:空单元格标记为「缺失」或删除整行。
  5. 格式统一:日期设为 yyyy-mm-dd,文本去空格。
Excel — 删除重复值列:全选(依据列)姓名城市日期保留首次出现,删除其余重复行确定取消
常见整理命令对照表
需求Excel 操作Pandas 代码
去重数据 → 删除重复值df.drop_duplicates()
删空行筛选 → 删除空白df.dropna()
格式统一设置单元格格式df['日期'] = pd.to_datetime(df['日期'])
分类归档按列排序/分组df.sort_values('类别')

1.2.1 代码联动:整理归类示范

1.2.1 代码联动 · 去重/格式统一/分类
(点击运行查看结果)

1.2.2 业务数据汇总 · 透视表

工具实操步骤(Excel 透视表)
  1. 选中数据区域 → 「插入」→「数据透视表」。
  2. 把「类别/城市」拖到,把「分数/金额」拖到
  3. 右键值字段 → 「值汇总方式」选求和/平均值/计数。
  4. 生成透视表后,复制结果到新的工作表,命名保存。
Excel — 数据透视表行:类别列:月份值:销售额(求和)把字段拖到对应区域 → 自动生成汇总表

模块二:数据标注(60分 · 核心分值)

⚠️ 这是分值最高的模块!标注结果误差率需符合合格标准:通常 ≥ 95% 准确率

2.1.1 数据清洗 · 三类数据真实操作

📄 文本清洗
  1. 用文本编辑器或 Python 去除 HTML 标签、特殊符号。
  2. 统一全半角、大小写。
  3. 删除重复句、空行、乱码。
  4. 保存为 UTF-8 编码的 txt/csv。
🖼️ 视觉清洗
  1. 用图片浏览器批量查看,删除模糊/过曝/欠曝图。
  2. 删除重复图片(可用文件名/哈希比对)。
  3. 统一格式为 jpg/png,统一尺寸。
  4. 按类别建文件夹归档。
🎙️ 语音清洗
  1. 用音频播放器听检,标出静音段、噪声过大段。
  2. 删除破损音频(无法播放的文件)。
  3. 统一采样率(如 16kHz)和格式(wav/mp3)。
  4. 截取有效语音片段并编号。

2.1.2 数据标注 · 工具实操截图

🖼️ 视觉标注:LabelImg 操作
  1. 打开 LabelImg → 「Open Dir」选择图片文件夹。
  2. 「Create RectBox」画矩形框 → 输入标签名(如 cat)。
  3. 按「Ctrl+S」保存为 XML/TXT。
  4. 下一张:「Ctrl+D」。
LabelImg — 目标检测画框图片预览label标注列表1. label [x,y,w,h]W 画框 · A/D 切换
📄 文本标注:Doccano / Excel 操作
  1. 创建项目 → 选择「文本分类」或「序列标注」。
  2. 导入 txt/csv 数据。
  3. 按标签体系标注(情感:正面/负面/中性;NER:人名/地名/机构)。
  4. 导出 JSONL/CSV 标注结果。
doccano — 文本情感标注这家店态度真差,根本不想再来选中文本 → 点标签负面正面

2.1.2 代码联动:情感标注后分类统计

2.1.2 代码联动 · 情感标注分类统计
(点击运行查看结果)

2.2.1 标注后数据分类

真实操作步骤
  1. 按标签类别建立文件夹:正面/负面/中性/
  2. 把对应数据文件/记录复制到对应文件夹。
  3. 检查错标、漏标,进行二次修正。
  4. 导出结果文件:JSON / XML / CSV,命名规范:项目名_标注结果_日期.csv

2.2.2 标注后数据统计

必会公式
完成率 = 已标注数 ÷ 应标注总数 × 100%
准确率 = 标注正确数 ÷ 抽检总数 × 100%(合格线常 ≥ 95%)

实操考试会要求填写「标注任务完成记录表」和「质量自检表」,包括:总样本数、各类别数量、完成率、准确率、标注人、日期。

模块三:智能系统运维(10分)

3.1 智能系统基础操作

  1. 启动系统,用指定账号登录。
  2. 按任务单调用 AI 功能:智能客服对话、分类工具、推理任务。
  3. 记录输入输出示例(截图或复制文本)。
  4. 检查系统默认参数,必要时还原默认值。

3.2 智能系统维护 · 填表模板

系统运行日志
日期:2026-08-15
功能:智能客服测试
调用次数:20
成功率:19/20 = 95%
异常:1 次超时(14:32)
处理人:张三

问题反馈单
问题描述:客服回复偏离主题
复现步骤:输入"退货"后选择"换货"
期望结果:进入换货流程
实际结果:仍提示填写退货原因

🛡️ 数据安全法合规专项(2026 权重上升)

⚠️ 2026 年多地大纲把「数据合规与职业道德」权重从 5% 提升到约 20%,实操中也会考「采集前是否合规、敏感信息是否脱敏、是否超范围使用」。
《数据安全法》《个人信息保护法》要点
  • 合法正当:采集数据前需有明确目的,不得非法收集。
  • 最小必要:只采集完成任务所必需的数据。
  • 告知同意:涉及个人信息时,需告知用户并取得同意。
  • 脱敏处理:手机号、身份证、地址等需遮蔽后再使用/标注。
  • 分类分级:重要数据与核心数据实行更严格管理。
实操中的合规检查清单
  1. 采集数据前,确认是否有授权或公开来源。
  2. 检查字段是否含手机号、身份证、人脸、地址。
  3. 敏感字段做脱敏:13812345678 → 138****5678
  4. 标注结果中不得保留原始敏感信息。
  5. 保存路径加密或设权限,防止泄露。

代码联动:自动手机号脱敏

合规代码 · 手机号/身份证脱敏
(点击运行查看结果)

📝 实操自测(点开看答案)

理论填空必背(来自真题讲解)

下面这些填空来自培训课件与考试截图中的高频考点。先遮住答案自己填,再点开对照。

填空 1:Pandas 两大核心数据结构是 ____ 和 ____;其中 Series 是____,DataFrame 是____。点击看答案
✅ Pandas 两大核心数据结构是 SeriesDataFrame;其中 Series 是一维标签化数组结构,DataFrame 是二维表格结构(类似 Excel)
填空 2:cv2.imread(path) 读取失败时通常返回 ____;OpenCV 默认颜色顺序是 ____,Matplotlib 按 ____ 显示。点击看答案
✅ cv2.imread(path) 读取失败时通常返回 None;OpenCV 默认颜色顺序是 BGR,Matplotlib 按 RGB 显示。
填空 3:np.max(arr) 返回数组的____,np.argmax(arr) 返回____。点击看答案
✅ np.max(arr) 返回数组的最大值,np.argmax(arr) 返回最大值的索引位置
填空 4:os.path.splitext(filename) 返回____;配合 ____() 可实现大小写不敏感的扩展名判断。点击看答案
✅ os.path.splitext(filename) 返回(文件名, 扩展名) 元组;配合 .lower() 可实现大小写不敏感的扩展名判断。
填空 5:os.makedirs(path, exist_ok=True) 的作用是____。点击看答案
✅ os.makedirs(path, exist_ok=True) 的作用是递归创建多级目录,目录已存在时不报错
填空 6:函数的统一写法是:____ 函数名(参数): ... ____ 结果。点击看答案
✅ 函数的统一写法是:def 函数名(参数): ... return 结果。
填空 7:计数器三件套:先 ____,满足条件时 ____,最后打印计数结果。点击看答案
✅ 计数器三件套:先 count = 0,满足条件时 count += 1,最后打印计数结果。
填空 8:批量读取文件路径的常用函数是 ____,通配符写法如 "data/*.jpg"。点击看答案
✅ 批量读取文件路径的常用函数是 glob.glob(),通配符写法如 "data/*.jpg"。
填空 9:把 Python 对象写入 JSON 文件的函数是 ____;读取 JSON 文件为 Python 对象的函数是 ____。点击看答案
✅ 把 Python 对象写入 JSON 文件的函数是 json.dump();读取 JSON 文件为 Python 对象的函数是 json.load()
填空 10:复制文件并保留元信息的推荐函数是 ____;保存图像帧的 OpenCV 函数是 ____。点击看答案
✅ 复制文件并保留元信息的推荐函数是 shutil.copy2();保存图像帧的 OpenCV 函数是 cv2.imwrite()

🐍 Python 在线编程环境

这里是一个独立的浏览器 Python 运行器,基于 Pyodide(浏览器里的 Python)。你可以直接写代码、运行、看结果。已预装 NumPy、Pandas、Matplotlib。涉及本地文件/图片/OpenCV 的代码请在本地 VS Code 运行。

📌 使用提示

  • 首次运行会从 CDN 加载 Python 环境,约 3–8 秒,请耐心等待。
  • 支持 print()、NumPy、Pandas、Matplotlib 绘图(图会自动显示在结果下方)。
  • 文件操作可用:运行器使用虚拟文件系统,你可以用 open() 读写当前目录下的文件。
  • 不支持 OpenCV / 视频处理,这类代码请复制到本地运行。
Python 在线运行器 · 自由写代码
(点击运行查看结果)

🎯 建议练习路线

  1. 先在本页熟悉 Python 语法和报错。
  2. 再到「四、真题精讲 → 实操代码演变(易→难)」,每关都有「在线运行」按钮,预装好了代码。
  3. 遇到困难先对照「必背语法 / 变量」和「统一写法演示」,再自己改代码跑。

🎴 函数闪卡背诵游戏

把重点函数做成可翻转的闪卡:正面看英文+中文意思,点一下翻到背面看格式 + 示例 + 记忆口诀。点「✅ 认识」会长期记住,点「❌ 不认识」下次还会再考。零基础也能玩,遇到英文点 🔊 听读音。

掌握度 0% · 已认识 0/0
Python
print
打印输出
👆 点击卡片翻面看用法

用法

🎉 这一轮刷完啦!

0%

已认识 0 张

2024–2026 真题自测库

以下题目整理自五级(初级)人工智能训练师公开考试资料(理论知识复习题 + 操作技能复习题 / 模拟试卷),全部为五级考点先自己想答案,再点开看正确答案和解析。建议每天刷 20 题,错题反复看。

共 251 题
从真题库随机组卷,限时作答,交卷出分
点击题目展开答案 · 标 单选 多选 判断 · 点击 ⭐ 收藏 / ❌ 标记错题

📜 背诵速记版(一页背完)

这一版把要背的全浓缩在一页,适合随时打开快速背。内容从同一网址下的「背诵版」自动加载,不用再开新页面。

💡 想打印成 PDF 随身背:点浏览器右上角「⋯ → 打印」(手机也支持),或直接截图保存。
⏳ 正在加载背诵版(首次需联网几秒)…

🧩 缩进小测验:这段代码缩进对吗?

Python 讲究「缩进 = 层级」。下面每段代码,请你判断:缩进用对了吗?点「✅ 正确 / ❌ 错误」看解析。反复练,考试不踩坑。

规则回顾:看到 : 的下一行要缩进 4 个空格;同一层的代码要左对齐(顶格);缩进不一致会直接报错 IndentationError
已答 0/0 · 正确 0

🔤 字符串 / 文件 / 可视化 变式题

同一个知识点换不同场景反复练,才真会。每题都能直接点「▶ 运行」看结果。先自己写,再对照参考代码。

模拟考试

00:00
0/0

🎯 阶段融合题 · 每天 3 道

按第一阶段、第二阶段、第三阶段划分,每阶段 15 道融合题。每道题都可在线运行,建议每天做 3 道,循环巩固,避免遗忘。当前显示的是第一阶段,点击标签切换。

题 1:样本信息格式化输出

用变量保存样本名、标签和分数,按格式输出报告。

题 1:样本信息格式化输出
(点击运行查看结果)

题 2:列表索引取首尾

给定样本列表,取出第一个和最后一个样本名。

题 2:列表索引取首尾
(点击运行查看结果)

题 3:字典取值与判断

从样本字典中读取年龄和标签,并判断是否成年。

题 3:字典取值与判断
(点击运行查看结果)

题 4:及格判定

给定考试分数,判断是否合格(≥60 分合格)。

题 4:及格判定
(点击运行查看结果)

题 5:统计各标签数量

遍历标签列表,统计 positive / negative / neutral 各有多少个。

题 5:统计各标签数量
(点击运行查看结果)

题 6:CSV 行拆分字段

把一条逗号分隔的记录拆成姓名、年龄、标签三个字段。

题 6:CSV 行拆分字段
(点击运行查看结果)

题 7:封装准确率函数

写一个函数,传入正确数和总数,返回准确率百分比。

题 7:封装准确率函数
(点击运行查看结果)

题 8:批量计算文本长度

用列表推导式,计算每条评论的字数。

题 8:批量计算文本长度
(点击运行查看结果)

题 9:带序号遍历文件

给文件列表加上序号打印,方便定位。

题 9:带序号遍历文件
(点击运行查看结果)

题 10:列表去重保序

去除样本列表中的重复项,同时保持原有顺序。

题 10:列表去重保序
(点击运行查看结果)

题 11:判断图片文件名

判断文件名是否为图片(.jpg / .png / .jpeg,忽略大小写)。

题 11:判断图片文件名
(点击运行查看结果)

题 12:用字典做词频统计

统计一段文本中每个字出现的次数。

题 12:用字典做词频统计
(点击运行查看结果)

题 13:批量生成报告字符串

用 f-string 批量输出样本检查报告。

题 13:批量生成报告字符串
(点击运行查看结果)

题 14:读取嵌套字典

从标注结果 JSON 结构中读取图片宽度和标注框坐标。

题 14:读取嵌套字典
(点击运行查看结果)

题 15:综合筛选样本

从样本列表中筛选出标签为 positive 且分数大于 0.8 的样本 ID。

题 15:综合筛选样本
(点击运行查看结果)

📄 人工智能训练师(五级)真题试卷

八套真题资料整合:理论知识(单选 / 多选 / 判断)+ 实操技能(写入要求 · 例题 · 练习)。点「显示答案 / 看例题 / 看练习答案」即可在试卷内查看,无需翻页。

⏳ 加载中…

🏷️ 照片 / 精灵标注实操教程(五级 · 模块二 数据标注)

这部分专门讲图像类标注——也就是「给一张照片画框、标出目标」以及「精灵图(雪碧图)里每张小图的坐标怎么算」。它是五级实操 模块二 数据标注(占 60 分,最核心) 里视觉标注的落地代码。下面两段代码都能在「▶️ 在线运行」里直接跑,跟着抄一遍就会了

✅ 先记住标注的「坐标规矩」:一张图宽 W、高 H;一个框用左上角 (x1,y1)右下角 (x2,y2) 两个点表示;框宽 = x2−x1,框高 = y2−y1。和考试里「矩形框标注用于目标检测」完全对应。

📸 照片 1:给一张动物照片画矩形框 + 导出标准标注

下面模拟「保护动物」试题里的一张照片(photo1.jpg,800×600),标注员框出了一只动物,我们把它写成 LabelMe 标注工具通用的 JSON 格式(真实考试里你用 LabelMe 鼠标画框,本质就是算这几个坐标)。

照片1 · 矩形框标注 → LabelMe JSON
(点击运行查看结果)
💡 考点对应:矩形框(Bounding Box)标注 → 目标检测;坐标(x1,y1,x2,y2);导出格式 JSON/XML/CSV;边界模糊标最内接矩形、被遮挡标可见部分。全部在「五级考核要素细目表 · 数据标注」里。

🧚 精灵标注(Sprite Sheet):一张大图里每张小图的坐标怎么算

「精灵图 / 雪碧图(sprite sheet)」是把很多小图标排进一张大图。做标注或做游戏素材时,要算出每个小精灵在大图里的位置框。下面按「网格」自动算出来:

精灵标注 · 网格坐标计算
(点击运行查看结果)
💡 标注工具速记:矩形框用 LabelImg(出 XML/Pascal VOC 或 COCO JSON);多边形分割用 LabelMe(出 JSON);文本标注用 doccano / LabelStudio。考试「视觉标注」就考这三类的思路与坐标格式。

📋 实操标注标准作业流程(照着做就不会丢分)

  1. 采集:拿到照片/视频帧,确认场景与标注目标符合业务需求。
  2. 定规范:先写「标签定义 + 标注示例 + 边界规则」(如:边界模糊标最内接矩形)。
  3. 画框/描边:用工具标出目标,紧贴目标边缘、被遮挡只标可见部分。
  4. 质检:多人交叉抽检,计算标注准确率(合格线通常 ≥ 95%)与一致性。
  5. 导出提交:按格式导出 JSON / XML / CSV,并填写完成记录表与质量自检表。

📺 五级初级免费视频资源汇总(仅收录公开可访问内容)

下面这些资源都是公开、免费、能直接打开看的,适合配合本站的「先教后考」路线使用。按「官方 > 公开课 > 科普 > 线下公益班」的优先级看,效率最高。

⚠️ 本站明确不收录、也不建议你搬运的内容:① 需登录的付费课程(如 atacollege 等培训平台整站);② 各类「课程分享 / 资源网」里的盗版视频。这些要么违反平台条款、要么涉及版权,不能原样搬进你的网站。下面只列合规的公开资源。
① 人社部官方 · 人工智能训练师(初级)

平台:人力资源社会保障部 职业技能等级认定平台
地址:jc.mohrss.gov.cn/lesson/834
费用:免费 等级:五级/初级
特点:官方出品,理论+实践命题,0 基础友好,考什么就讲什么。
首选权威免费

② B站 · 2025 AI训练师零基础入门公开课

地址:BV1oxXrYDEfh
时长:约 11 小时 37 分
覆盖:岗位认知 → 标注工具安装(LabelImg) → 智能客服微调 → 训练项目全流程。
免费实操多适合0基础

③ B站 · AI 科普建立认知(先看这个再学)

· 一次看懂人工智能 BV1134y1d72L
· 商汤 AI 101 BV1EE411W7V3
· 纪录片《你好,AI》
用途:搞清「机器学习/深度学习/标注」到底是什么,看课不犯困。
免费打基础

④ 国家职业标准(2021版) · 考纲依据

搜索关键词:「人工智能训练师 国家职业技能标准 2021」。
这是出题的根本依据:五级考数据采集/清洗/标注/运维,权重 30/25/60/10(操作)+ 理论对应模块。
必读考纲来源

⑤ 各地免费公益培训班(线下+免费考证)

绵阳 / 珠海 / 武汉 / 长沙等地人社部门常推「免费 AI 训练师培训班」,学完可自费考五级证、领补贴。
关注当地「人社」「职训中心」公众号获取期次。
免费可考证线下实操

⑥ 本站配套(你已经在用)

本平台的「融合学习路径 + 实操考核详解 + 真题库 + Python 在线运行器」就是按五级考纲搭的,配合上面视频看,效率翻倍。
随时练可运行

推荐观看顺序:③ 科普打底 → ① 官方课建立框架 → ② 公开课看实操 → 回本站「融合路径」边学边敲 → 「真题库」刷题。每天 1.5–2 小时,约 2–3 周可冲刺考试。

📚 实操项目详细指导教程(五级 · 模块一/二/三 全程演练)

五级实操 = 采集(30%) + 标注(60%) + 运维(10%)。下面用 7 个代表性项目,按「目标 → 工具 → 操作步骤 → 写代码 → 常见坑 → 评分点」完整走一遍。下面带 ▶ 的运行器都能直接跑,跟着抄一遍就会了

🛠️ 各项目所需软件 & 📺 视频指引

项目需要什么软件 / 工具免费视频在哪学(专门讲本节)
项目1 客服会话采集记事本 / VS Code 看原始格式 + pandas(不会写代码也可只用 Excel 分列)📺 B站 BV1oxXrYDEfh(约 11.5 小时,含标注工具安装、智能客服微调、训练全流程
📚 更多见 📺 免费视频资源汇总 板块
项目2 SQLite 采集SQLite / Navicat / DB Browser for SQLite
项目3 情感清洗标注Excel / WPS + doccano(文本标注)
项目4 分类统计Excel 透视表 / pandas groupby
项目5 数据脱敏Python + pandas(re 正则脱敏)
项目6 目标检测标注精英标注助手 / LabelImg(画矩形框,导出 XML)📺 同上 BV1oxXrYDEfh(「标注工具安装」段)
另可搜「LabelImg 使用教程」「精灵标注助手 目标检测」
项目7 图像分类标注精英标注助手 / LabelImg / LabelStudio(打类别标签,导出 XML)
项目8 CSV 日志读取VS Code + Python / Excel(预览 CSV)📺 统一见 BV1oxXrYDEfh
另可搜「pandas read_csv」「os.listdir 遍历文件」「shutil.copy 自动归类」「json.load 配置机器人」
项目9 文件遍历筛选VS Code + Python(os.listdir / glob)
项目10 按文件名归类VS Code + Python(os / shutil)
项目11 机器人配置VS Code + Python(json 读写)

说明:① 上述软件均为公开免费,考试机房一般会预装;② 视频只引用公开免费资源,不含任何需登录付费课程(如 atacollege);③ 下面每个工具都配了「软件界面示意图」(非真实截图,仅为界面布局参考),对照操作即可学会;想换成真实截图,把你的软件界面图替换进去仍是图文教程。

🗂️ 项目一:客服会话数据采集(txt → CSV)

目标:把客服聊天记录整理成结构化表格,方便后续标注与分析。
工具:记事本/VS Code 看原始格式 + pandas 处理(不会写代码也能用 Excel 分列做)。
步骤:① 看清原始格式(每行「时间|方向|内容」)② 用 pandas 读、过滤脏数据、导出。

项目1 · 客服会话采集 txt→csv
(点击运行查看结果)
💡 常见坑:① 分隔符写错(用 sep="|" 不是逗号);② 不写 encoding="utf-8-sig" 导致 Excel 打开中文乱码;③ 脏数据(缺字段行)没过滤,导出的 CSV 列数对不上。
评分点:字段完整、无空行、列名规范、中文不乱码。

🗄️ 项目二:SQLite 数据库采集

目标:从业务数据库里 SELECT 需要的字段,导出成 CSV。
工具:DB Browser for SQLite / Navicat(图形界面直接导),或下面用代码做。
步骤:① 连接库 ② 写 SELECT(带 WHERE 过滤 NULL/日期)③ pandas 读结果导出。

项目2 · SQLite→CSV 采集
(点击运行查看结果)
💡 常见坑:message IS NULL 的行没过滤;② 忘记 conn.close() 锁表;③ 日期筛选条件写错。图形界面做法:打开 .db → 执行 SQL → 「导出 CSV」同样能得分。
评分点:只导出有效字段、NULL 已剔除、列名准确。

😊 项目三:情感识别·数据清洗与标注

目标:给文本打「正面/负面/中性」标签,并先把脏数据清干净。
工具:Excel / doccano(文本标注工具)。
步骤:① 去缺失 ② 去首尾空格 ③ 去重 ④ 按关键词打标 ⑤ 统计分布。

项目3 · 情感清洗与打标
(点击运行查看结果)
💡 常见坑:① 标签不统一(有人写「好评」有人写「正面」);② 没先定「标注规范」就开标,前后不一致;③ 重复样本没去重拉低质量。
评分点:清洗步骤完整、标签一致、有分布统计。

📊 项目四:标注后分类统计(Excel 透视表 / pandas)

目标:统计各类标签的数量与占比,给业务方看。
工具:Excel 透视表(拖拽即可)或 pandas groupby / value_counts
步骤(Excel):选中数据 → 插入 → 透视表 → 行放「标签」、值放「计数」。下面用代码复刻同样结果:

import pandas as pd
df = pd.read_csv("标注结果.csv")
print(df["标签"].value_counts())            # 各类数量
print((df["标签"].value_counts(normalize=True)*100).round(1))  # 占比%
print(df.groupby("标签").agg(数量=("编号","count"), 平均分=("分数","mean")).round(1))
💡 常见坑:① 透视表「值字段」没选「计数」而默认「求和」得到一堆 0;② 占比没乘 100 看不出百分比。
评分点:数量、占比都算对,并写出结论。

🔒 项目五:数据脱敏(合规专项 · 贴合今年上升权重)

目标:对手机号、身份证、姓名做基础脱敏,符合《个人信息保护法》《数据安全法》。
工具:Excel 替换 / 用下面正则表达式批量处理。
步骤:① 识别敏感字段 ② 用规则保留部分字符、其余打星 ③ 输出脱敏后数据,原数据不落地。

项目5 · 手机号/身份证脱敏
(点击运行查看结果)
💡 合规要点(今年分值上升):① 采集遵循「合法、正当、必要」原则;② 敏感个人信息需脱敏/加密;③ 不超范围收集、不长期留存;④ 考试常考:给一段含手机号的文本,写出脱敏后的结果。
评分点:脱敏规则正确、可还原必要信息、说明合规依据。

🖼️ 项目6 · 目标检测标注:日常用品(bottle)

对应真题「原始数据清洗与标注」第一小题:用标注工具对 \items\ 路径下的图片做目标检测,标签为 bottle,导出 XML 格式。

工具实操步骤(精英标注助手 / LabelImg)
  1. 打开标注工具 → 点击「新建项目」。
  2. 项目类型选「目标检测 / 矩形框标注」
  3. 填写项目名称(如 日常用品标注),图片文件夹选 \items\
  4. 在「标签列表」里添加标签:bottle
  5. 对每张瓶子的图片,按住鼠标左键拖动画出矩形框,框要紧贴瓶身边缘。
  6. 选中框后输入/选择标签 bottle,按 Ctrl+S 保存。
  7. 点击「导出」→ 格式选 XML → 保存到 \items\ 文件夹(与图片同名,扩展名 .xml)。
精英标注助手 — 目标检测(bottle)图片预览 items/bottle_01.jpgbottle标注列表1. bottle [x,y,w,h]W 画框 · A/D 切换
导出的 XML 格式(Pascal VOC)
<annotation>
  <folder>items</folder>
  <filename>bottle_001.jpg</filename>
  <size>
    <width>800</width><height>600<height><depth>3</depth>
  </size>
  <object>
    <name>bottle</name>
    <bndbox>
      <xmin>350</xmin><ymin>120</ymin>
      <xmax>470</xmax><ymax>520</ymax>
    </bndbox>
  </object>
</annotation>
  • <filename>:对应原图文件名。
  • <name>:标签名,本题固定为 bottle
  • <bndbox>:矩形框左上角 (xmin,ymin) 和右下角 (xmax,ymax)

项目6 · 代码联动:生成一张 bottle 标注的 XML

项目6 · 生成 bottle 标注 XML
(点击运行查看结果)
💡 常见坑:① 标签写成 Bottle(大小写要一致);② 坐标超出图片范围;③ 保存路径不是 \items\;④ 用成「图像分类」模式而不是「目标检测」模式。
评分点:矩形框紧贴目标、标签正确、XML 与图片同名同路径。

🦒 项目7 · 图像分类标注:动物(giraffe / zebra)

对应真题第二小题:用标注工具对 \zoo_classify\ 路径下的图片做图像分类,类别为 giraffe(长颈鹿)和 zebra(斑马),导出 XML 到 \zoo_classify\labels\

工具实操步骤(精英标注助手 / 同类工具)
  1. 打开标注工具 → 点击「新建项目」。
  2. 项目类型选「图像分类」(不是目标检测)。
  3. 填写项目名称(如 动物图像分类),图片文件夹选 \zoo_classify\
  4. 在「类别列表」里添加两个标签:giraffezebra
  5. 逐张查看图片:长颈鹿图选 giraffe,斑马图选 zebra,点击「确认 / 下一页」。
  6. 全部标注完成后,点击「导出」→ 格式选 XML → 保存到 \zoo_classify\labels\
精英标注助手 — 图像分类(giraffe)图片预览 zoo_classify/giraffe_003.jpg长颈鹿图选择类别(整图选一个)✓ giraffezebra确认 / 下一页选好后导出 XML → labels\
导出的分类 XML 示例(单张图一个类别)
<annotation>
  <folder>zoo_classify</folder>
  <filename>giraffe_003.jpg</filename>
  <size>
    <width>1024</width><height>768</height><depth>3</depth>
  </size>
  <object>
    <name>giraffe</name>
  </object>
</annotation>
  • 图像分类不画框,只对整张图片打一个类别标签。
  • 导出文件夹必须叫 labels,与图片文件夹 zoo_classify 同级。
  • 有些工具会导出成 image_name.xml,每文件一个类别。

项目7 · 代码联动:批量生成分类标注 XML

项目7 · 批量生成 giraffe/zebra 分类 XML
(点击运行查看结果)
💡 常见坑:① 把分类做成了目标检测(多画了框);② 类别名拼错(giraff/zebra 大小写);③ XML 没保存到 labels 子文件夹;④ 一张图同时标了两个类别(除非题目要求多标签)。
评分点:类别正确、文件命名/路径规范、XML 格式完整。

🗂️ 项目8 · 业务数据采集:结构化 CSV 用户行为日志

对应真题「一、业务数据采集」:电商/平台用户行为日志通常存为 user_log.csv,要求用 Python 读取前 10 行并输出总行数

工具实操步骤(VS Code / Excel)
  1. 把素材 user_log.csv 复制到 C:\Project\1\(或题目指定路径)。
  2. 用 Excel 预览:确认表头、分隔符是逗号还是空格、是否有中文乱码。
  3. 在 VS Code 新建 answer_01.py,写入 pandas 读取代码。
  4. 运行后截图:前 10 行 + 总行数。
  5. .py 文件和运行结果截图保存到答案回收路径。
answer_01.py — Visual Studio Code1234importpandasaspddf=pd.read_csv('user_log.csv')print(df.head(10))print(len(df))$ python answer_01.py user_id action ts 1001 click 2024-03-01 总行数: 12890
必会代码
import pandas as pd
df = pd.read_csv('user_log.csv', encoding='utf-8')
print(df.head(10))      # 前10行
print(len(df))          # 总行数
print(df.shape)         # (行数, 列数)

编码不对时试 encoding='gbk';分隔符是空格时用 sep=' '

项目8 · 代码联动:生成模拟日志并读取

项目8 · CSV 读取前10行 + 总行数
(点击运行查看结果)
💡 评分点:① 能正确读取 CSV;② 输出前 10 行(不是前 9 行或 11 行);③ 输出总行数;④ 代码和截图保存到指定目录。
常见坑:忘记 encoding='utf-8' 导致中文乱码;把 head(10) 写成 head()(默认 5 行)。

📁 项目9 · 业务数据处理:文件遍历与关键词筛选

对应真题「二、业务数据处理」两小题:① 遍历 server_logs\ 统计 .txt 日志文件数量;② 遍历 dataset\animals\ 筛选文件名含 tiger / lion 的图片。

真实操作思路
  1. os.listdir(path) 列出文件夹里所有文件名。
  2. os.path.isfile() 过滤掉子文件夹。
  3. .endswith('.txt')'.txt' in name 统计文本文件。
  4. if 'tiger' in name or 'lion' in name: 筛选关键词。
  5. 把结果打印/写入答案文件。
终端 — count_files.py$ python count_files.pytxt 文件数量: 37tiger 图片:dataset/animals/tiger_01.jpgdataset/animals/tiger_02.jpglion 图片:dataset/animals/lion_01.jpg
必会函数
import os
files = os.listdir('server_logs')
txt_files = [f for f in files if f.endswith('.txt')]
print('txt数量:', len(txt_files))

animals = os.listdir('dataset\\animals')
keys = [a for a in animals
        if 'tiger' in a or 'lion' in a]
print(keys)

项目9 · 代码联动:文件遍历 + 关键词筛选

项目9 · 文件遍历 + 关键词筛选
(点击运行查看结果)
💡 评分点:① 正确遍历文件夹;② 正确统计/筛选;③ 输出格式清晰。
常见坑:Windows 路径用 \\/;大小写不敏感时加 .lower();别把子文件夹也算进文件。

🏃 项目10 · 标注后数据分类:按文件名自动归类图片

对应真题「四、标注后数据分类与统计」:把 sports_images\ 文件夹里以 tennis_ / swimming_ / cycling_ 开头的图片,自动复制/移动到对应的类别文件夹。

真实操作步骤
  1. 打开 sports_images 文件夹,观察文件名前缀规律。
  2. 手动:新建 tennis/swimming/cycling/ 三个文件夹,按前缀拖文件进去。
  3. 或写 Python 脚本自动归类(推荐,考试更稳)。
  4. 检查每个子文件夹里的图片数量和文件名。
  5. 截图保存归类结果。
文件资源管理器 — sports_images(已归类)tennis/tennis_01.jpgtennis_02.jpgtennis_03.jpg共 18 张swimming/swimming_01.jpgswimming_02.jpg共 12 张cycling/cycling_01.jpgcycling_02.jpg共 15 张
核心思路
import os, shutil
prefixes = ['tennis_','swimming_','cycling_']
for pre in prefixes:
    os.makedirs(pre, exist_ok=True)
for name in os.listdir('sports_images'):
    for pre in prefixes:
        if name.startswith(pre):
            shutil.copy(...)

项目10 · 代码联动:按文件名前缀自动归类

项目10 · 按文件名前缀自动归类
(点击运行查看结果)
💡 评分点:① 正确识别前缀;② 创建对应类别文件夹;③ 图片归档正确;④ 输出分类统计。
常见坑:copy 还是 move 要看题目要求;前缀含下划线 tennis_ 不要漏写;不要把无关文件归进去。

🤖 项目11 · 智能系统运维:政务问答机器人配置

对应真题「五、智能系统运维」:修改/补充 gov_robot_config.json 里的问答对,让机器人能正确回答政务大厅常见问题(如「办理身份证需要什么材料」「多久能领取」)。

工具实操步骤(VS Code)
  1. 找到 gov_robot_config.json,用 VS Code 打开。
  2. 观察 JSON 结构:通常有 qa_pairs 数组,每个元素含 questionanswer
  3. 按任务单要求新增/修改问答对(注意 JSON 语法:双引号、逗号、缩进)。
  4. 保存后运行测试脚本,输入问题看机器人回答是否正确。
  5. 把修改后的 JSON 和运行截图保存到 C:\Project\5\
gov_robot_config.json — VS Code"qa_pairs": [{"question":"办理身份证需要什么材料?","answer":"请携带身份证和户口簿..."}]// 新增一条问答对后保存$ python test_robot.py问: 办理身份证需要什么材料?答: 请携带身份证和户口簿...测试通过 ✓
JSON 配置格式
{
  "qa_pairs": [
    {"question":"办理身份证需要什么材料?",
     "answer":"请携带身份证和户口簿..."},
    {"question":"身份证到期了怎么换?",
     "answer":"请携带...到政务大厅..."}
  ]
}

项目11 · 代码联动:加载配置并模拟问答

项目11 · 政务问答机器人配置
(点击运行查看结果)
💡 评分点:① JSON 格式正确;② 问答对内容符合任务单;③ 测试能正确匹配;④ 配置文件保存到指定路径。
常见坑:JSON 里用了单引号;最后一个元素后面多加了逗号;中文标点写成英文标点导致匹配失败。
十一项目串起来就是一条完整实操链:采集(项目1/2/8) → 处理(项目9) → 清洗标注(项目3) → 统计(项目4/10) → 脱敏合规(项目5) → 视觉目标检测(项目6) → 视觉图像分类(项目7) → 系统运维(项目11)。把这条链练熟,五级实操 90% 以上的分就拿到了。每个项目都能在「🐍 Python 在线运行器」里自由改写练习。

🛠️ 标注 & 数据清洗 软件实操细节教程

这一节专门讲软件怎么用——把「标注」和「数据清洗」两个五级实操重点,按真实软件菜单路径一步步拆开。每步都配软件界面示意图(对照着点菜单就能学会;想换成真实截图也行)。想看视频演示,直接跳到本节末尾「📺 B站看什么」。

一、数据清洗软件细节(Excel / WPS + pandas)

1.1 Excel / WPS 清洗(不会写代码也能做)

① 删除重复值
  1. 鼠标拖动选中整个数据区域(含表头)。
  2. 顶部菜单点「数据」→「删除重复值」。
  3. 在弹窗里勾选用于判断重复的列(一般全选),点「确定」。
  4. 提示「删除了 N 个重复项」即成功。
Excel — 业务数据.xlsx数据 ▸ 删除重复值姓名城市金额张三北京100张三北京100李四上海200(张三行重复)删除重复值全选姓名城市金额确定
② 分列(把「时间|方向|内容」拆开)
  1. 选中要拆的那一列。
  2. 「数据」→「分列」→ 选「分隔符号」→ 下一步。
  3. 勾选分隔符(如「其他」填 | 或逗号)→ 下一步 → 完成。
③ 透视表(分类统计)
  1. 点数据任意单元格 →「插入」→「透视表」。
  2. 把「类别」拖到行、把「数量」拖到值,即得到分类汇总。
Excel — 数据透视表行:类别列:月份值:销售额(求和)把字段拖到对应区域 → 自动生成汇总表

1.2 pandas 清洗(代码联动,考场上更稳)

数据清洗 · 去重/删空/统一格式
(点击运行查看结果)
💡 清洗常见坑:① 未统一编码导致中文乱码(CSV 保存务必 utf-8-sig);② 把"缺失"误当成"0";③ 去重前没先想清楚"哪些列相同才算重复",误删有效数据。

二、标注软件细节(目标检测 / 图像分类 / 文本情感)

2.1 LabelImg(目标检测 · 矩形框 → XML)

安装(一行命令)
pip install labelimg
使用步骤
  1. 命令行输入 labelImg 打开软件。
  2. 点「Open Dir」选择图片文件夹(如 \items\)。
  3. 先点「Create RectBox」,按住左键拖出矩形框,紧贴目标边缘
  4. 在弹出的框输入标签名(如 bottle)。
  5. Ctrl+S 保存为 Pascal VOC XML(与图片同名)。
  6. Ctrl+D 切下一张,循环。
labelImg文件列表bottle_001.jpgbottle_002.jpgitems/bottle_001.jpgbottleLabel ListbottleCreate RectBox → 拖框弹出输入框填标签名Save (Ctrl+S)
精英标注助手 / 同类工具(真题常用)
  1. 新建项目 → 选「目标检测」或「图像分类」。
  2. 填项目名、选图片文件夹,添加标签/类别(如 giraffe/zebra/bottle)。
  3. 目标检测:拖框 + 选标签;图像分类:整图选类别。
  4. 导出 XML → 目标检测同路径、分类导到 labels 子文件夹。
精英标注助手 — 新建项目项目名称:日常用品标注 | 图片文件夹:\items\选择项目类型:目标检测(矩形框)图像分类图像分割文本分类

2.2 doccano(文本情感标注)

  1. 打开 doccano → 创建项目 → 选「文本分类」。
  2. 「导入数据集」上传 txt/csv(每行一句话)。
  3. 在「标签」里添加 正面 / 负面 / 中性
  4. 逐条选中文本 → 点对应标签 → 保存。
  5. 导出 JSONL / CSV 标注结果。
doccano — 文本情感标注数据集这条手机太好用了!物流慢,差评。这条手机太好用了!选中文本 → 点标签情感标签正面负面中性保存并导出

2.3 Excel / WPS 做情感标注(最省事)

  1. 把评论放进 A 列。
  2. 在 B 列手动填 正面 / 负面 / 中性
  3. 用「数据 → 透视表」按情感统计数量。
  4. 保存为 情感标注_日期.xlsx
💡 标注共性要点:标签名全程大小写一致(如 bottle 不要有时写 Bottle);框要贴边、被遮挡只标可见部分;导出格式/路径严格按任务单(XML / \items\ / \labels\)。

📺 三、B站看什么(按需求对号入座)

你想解决的需求看什么
标注工具安装 + 目标检测全流程📺 B站 BV1oxXrYDEfh(约11.5h,含 LabelImg 安装、智能客服、训练全流程)
LabelImg 画框怎么用搜「LabelImg 使用教程 / 目标检测标注」→ 看 5–15 分钟实操短片
精英标注助手 / 精灵标注搜「精灵标注助手 目标检测」「精英标注助手 图像分类
Excel 数据清洗(分列/透视表)搜「Excel 数据清洗 分列 删除重复值 透视表
pandas 清洗/标注联动搜「pandas 数据清洗 入门」「pandas drop_duplicates to_datetime
doccano 文本情感标注搜「doccano 文本标注 教程
更多免费资源合集📺 免费视频资源汇总 板块
怎么用这节最高效:先把本节「软件步骤」过一遍 → 遇到不会的点,按上表去 B站搜对应短片(每个 5–15 分钟)→ 把你看的软件界面截图替换进对应的「示意图」位置,你的平台就变成一本专属图文教程。