文件
存放在计算机存储里、可以再次打开的一份记录;与一次运行中的内存不同,关闭之后仍在。
它是什么
文件 是存放在计算机存储里的一份记录:一段文字、一张表、一份程序本身。程序运行时,变量 住在内存里,进程结束往往就没了;写进文件,下次还能读回来。计算若要对得起一次实验或一份观测,通常需要这种可再次打开的痕迹,而不是只留在这一次运行的输出区。
Python 用 open 打开文件,再 read 或 write,用完后关闭。with open(...) as f: 会在离开这块时自动关闭,不容易把内容留在缓冲区里尚未落盘。
with open("note.txt", "w", encoding="utf-8") as f:
f.write("今日完成一次线性方程检验\n")
with open("note.txt", "r", encoding="utf-8") as f:
text = f.read()名字从哪来
file 原指办公里的卷宗、档案夹。计算机沿用这个比喻:磁盘上的一份有名字的数据,就像柜子里的一份材料。路径则是找到这份材料的地址。模式字母来自英语:r 是 read,w 是 write(会清空已有内容再写),a 是 append(在末尾追加)。
程序源代码也是文件,扩展名常常是 .py。运行中的变量不是文件;关机以后默认不保留。这个区分,和「思想写在纸上才可被下次阅读」是同一类事情。
它怎么工作
打开文件时要说明意图。只读一个不存在的文件,会引发 异常;写入模式若文件不存在,通常会新建。文本文件按字符读写,需要约定编码,中文常用 utf-8。读进来的内容是字符串(或一行行的字符串)。要当数字用,仍然要转换类型。按行处理时,行末往往带着换行符 \n,比较或转换前可能需要去掉两端空白。
写文件不会自动在屏幕上出现。要确认写成功,要么再读一次,要么用 print 另做一份给人看的输出。"w" 从空文件开始写;想保留旧内容再往后加,用 "a"。忘记关闭时,有的内容还停在缓冲区,没真正落到存储上。
生活里在哪里
实验记录本写下之后仍能再查;通讯录不是每次开机都重新打听所有电话;照片存在相册里,而不是只停留在取景框。图书馆的目录把「这份材料在哪里」与「材料本身」分开管理——路径与文件内容的关系与此类似。批量数据、需要保存的结果,用文件比反复 input 更合适;现场输入适合少量、必须由人当场给出的参数。
和相近概念的差别
input 问的是此时坐在屏幕前的人;文件问的是已经写好的材料。模块 是「拿来执行的 Python 代码文件」;普通数据文件是「拿来读写的内容」,解释器不会把它当成程序跑,除非故意去执行。import 加载的是代码,open 读取的是内容。
print 到输出区,不等于存盘。输出区是这一次运行的显示。要留下,得写入文件。
常见误会
误会 1:print 到输出区,就等于存盘了。
显示与持久化是两件事。见 print。
误会 2:用 "w" 打开一个已有文件,旧内容还在。
"w" 会从空文件开始写。追加用 "a"。
误会 3:不关闭也没关系。
缓冲区里的数据可能尚未落到存储上。with 能减少这类遗漏。
想知道更多
- 书:查尔斯·佩措尔德《编码:隐匿在计算机软硬件背后的语言》
- 书:埃里克·马瑟斯《Python编程:从入门到实践(第3版)》
- 书:艾伦·唐尼《像计算机科学家一样思考Python(第2版)》
- 书:布鲁克希尔《计算机科学概论》
未登录时不会保存学习进度