AI 给出的 Python 脚本可能只有十几行,也可能会读取文件、连接服务或删除内容。运行前先看清它会碰什么,再决定是否要试。这篇用一个只读虚构报名表的短脚本,练习找出输入、输出、依赖和可能的副作用。
需要先会打开终端并运行Python。建议先看D1文件、路径和压缩包、Python入门和Python基础语法。
先检查四件事
| 检查项 | 要问的问题 | 在示例中看哪里 |
|---|---|---|
| 输入 | 脚本从哪里拿资料? | Path("报名记录.csv")和source.open(...),读取当前练习目录里的CSV |
| 输出 | 运行后会出现什么? | print(...)只在终端显示三行统计 |
| 依赖 | 是否要安装别的软件或Python包? | import csv、from pathlib import Path;两者都随Python安装 |
| 副作用 | 会不会改文件、联网或启动其他程序? | 这段代码只读CSV,没有写入/删除调用,也没有网络请求 |
这里的“副作用”指运行脚本后电脑上发生的额外动作,例如覆盖文件、删除文件、上传资料或启动命令。看不懂它准备做什么,就先不要运行。
准备一份虚构报名表
把Python脚本练习材料包解压到一个新的空文件夹。里面的报名记录.csv只有三行虚构数据:两人已确认,一人候补。脚本也要放在这个文件夹里,因为它用当前目录下的相对路径寻找CSV。
看懂示例脚本
import csv
from pathlib import Path
source = Path("报名记录.csv")
wanted_status = "已确认"
with source.open(encoding="utf-8-sig", newline="") as file:
rows = list(csv.DictReader(file))
matched = 0
for row in rows:
if row["status"] == wanted_status:
matched += 1
print(f"读取文件:{source.name}")
print(f"总记录:{len(rows)}")
print(f"状态“{wanted_status}”:{matched}人")
从上往下看:
import csv和Path说明脚本使用了什么。这里没有外部软件包。Path("报名记录.csv")指定输入文件名。它是相对路径,实际位置由终端当前目录决定。source.open(...)以读取方式打开文件;csv.DictReader按第一行的列名读取每条记录。for逐条查看名单,if只统计状态和wanted_status一致的记录。- 最后三行
print把文件名、总数和匹配人数显示在终端。
list(...)会把读到的记录暂存在内存里,适合这里的三行样例。大文件要先确认电脑内存和处理方式,别把这段小示例直接用于大量数据。
在隔离目录里运行
先用终端cd进入刚解压的练习文件夹,再确认脚本和CSV都在当前目录:
pwd
ls
列表中应同时看到ai_script_review.py和报名记录.csv。确认是本次练习目录后再运行:
python ai_script_review.py
应看到:
读取文件:报名记录.csv
总记录:3
状态“已确认”:2人
人工数一下CSV:三行中两行的status是“已确认”,所以结果是2。脚本只读取这份练习文件并打印结果。
改一个条件,再核对结果
打开ai_script_review.py,把:
wanted_status = "已确认"
改为:
wanted_status = "候补"
保存后重新运行。输出应变成状态“候补”:1人。再和CSV逐行对照,确认只有周然一条候补记录。
练习包的先检查再运行.md列出了这段脚本的输入、输出、依赖和操作范围;两个expected-*.txt文件可用来核对两种输出。
遇到报错时检查
| 报错或现象 | 先检查 |
|---|---|
FileNotFoundError |
终端当前目录是不是练习文件夹,文件名是否一致 |
KeyError: 'status' |
CSV首行是否包含status这一列,代码键名是否拼对 |
| 中文乱码或解码错误 | 确认用的是包内CSV;它采用UTF-8编码 |
| 输出人数不对 | 先数CSV里的状态值,再检查筛选文字和空格 |
陌生脚本的运行底线
只在空的练习目录中试自己能逐行解释的代码。重点搜索write_text、unlink、rename等文件操作,requests或urllib等网络调用,以及subprocess、os.system等启动外部程序的代码。检查写入路径、发送对象和需要的密钥;不确定时先停下来,请可信的技术人员看过。
本例在Mac、Python 3.12.13上读取三行虚构CSV;将筛选条件改为“候补”后,输出与手工统计一致。材料包中的脚本没有写文件或网络请求。Windows操作、其他编码的CSV和大文件处理未测试。Python官方文档可查csv模块和pathlib路径。
封面背景由AI生成,标题另行排版。