PY / LAB 基础实验 08
A SMALL MACHINE FOR BIG IDEAS

写进去的字,
要关上文件才真正落盘。

逐步运行预设程序:看 write() 的内容先停在缓冲区、close() 之后才出现在磁盘上,
读取时位置怎样往后移,以及 CSV 和 JSON 在磁盘上到底长什么样。每一步都来自真实 Python 的运行。

FIG. 08 / FILE BENCHPython 文件读写台
12345678FILE·LAB
← → 单步 · 空格 播放/暂停 · PgDn 下一个程序正在校准
高亮行 = 刚执行的那一行;右侧显示它执行之后的状态

左侧滑台指向当前行,出错时竖旗落下,跳线连到下一步。右上是写缓冲托盘:write() 的内容先堆在这里,高亮块越高,还没写到磁盘的字节越多。右下是磁盘板:逐行显示文件在磁盘上的真实内容(· 表示空格)。磁盘板左边的光标滑块标出读取位置 tell() 落在哪一行;没有打开的读取文件时,滑块变暗。

准备—
FIELD NOTES

把规则带走

01 / 文本文件

with open(…, encoding='utf-8')

模式:'r' 读取(默认)、'w' 写入(打开时立即清空)、'a' 追加到末尾。始终写上 encoding='utf-8',读写用同一种编码。

read() 读全部,readline() 读一行,readlines() 得到列表,for line in f 逐行遍历;文件对象记着当前位置,seek(0) 回到开头。write() 不会自动换行,内容先进入缓冲区,close() 或 flush() 后才写入磁盘。用 with 会自动关闭。

02 / CSV

用 csv 模块,不要自己 split

打开 CSV 时写 newline=''。csv.writer(f).writerow(列表) 写一行,csv.reader(f) 把每行拆成列表。

DictReader 用第一行作列名,每行是字典;DictWriter 需要 fieldnames,writeheader() 写表头。读出来的数字都是字符串,计算前要 int()。值里有逗号时 csv 会自动加双引号。

03 / JSON

dump / load 处理文件,dumps / loads 处理字符串

json.dump(对象, f, ensure_ascii=False, indent=2) 写入,json.load(f) 读回。dict ↔ 对象,list ↔ 数组,True/False/None ↔ true/false/null,元组会变成数组。

JSON 字符串必须用双引号;集合等类型不能直接写入。修改 JSON 文件:读成字典 → 修改 → 整体写回。