跳到主要内容

文件读写:让程序学会"记笔记"

为什么需要文件?

程序运行时,所有数据都存在内存里——这就像你在脑子里默算,算完就忘。如果你想保存结果读取配置写日志,就必须跟文件打交道。

文件就是程序的"笔记本"。写入就是记笔记,读取就是翻笔记。

读取文件

加载代码编辑器中……

第一眼看上去,Python 好像更简洁。但别被表面骗了,两边都有自己的设计哲学:

PythonNode.js
核心函数内置 open()需要引入 fs 模块
推荐写法with open(...)fs/promises + async/await
自动关闭with 语句自动处理同步版不需要,异步版用完即回收

写入文件

加载代码编辑器中……

文件模式速查表

模式PythonNode.js说明
读取"r"readFileSync只读,文件必须存在
写入"w"writeFileSync覆盖,不存在则创建
追加"a"appendFileSync追加,不存在则创建
踩坑提醒

编码问题是新手的第一个大坑!

Python 3 在 Windows 上默认编码可能是 GBK 而不是 UTF-8,所以读中文文件时会乱码。永远显式指定 encoding="utf-8"

Node.js 也一样,readFileSync("file.txt") 不传编码参数会返回 Buffer(二进制数据),而不是字符串。记得加 "utf-8"

Python 的 with 语句 vs JS 的资源管理

Python 的 with 语句是一个非常优雅的设计——它确保文件用完后一定会被关闭,即使中间出了错误:

加载代码编辑器中……

Python 的 with 相当于自带了 try/finally,而 Node.js 的 readFileSync / writeFileSync 本身就是"读完即走"的一次性操作,所以通常不需要手动关闭。两种语言的思路不同,但目的一样:别让文件忘了关

逐行读取

处理大文件时,一次性读进内存可能会"撑爆"程序。逐行读取是更聪明的做法:

加载代码编辑器中……

读写 JSON 文件

JSON 文件是最常用的配置和数据存储格式(下一节会详细讲 JSON):

加载代码编辑器中……
PythonNode.js
写入 JSON 文件json.dump(obj, file)fs.writeFileSync(path, JSON.stringify(obj))
读取 JSON 文件json.load(file)JSON.parse(fs.readFileSync(path))
中文支持ensure_ascii=False默认支持
格式化indent=2JSON.stringify(obj, null, 2)

Python 写 JSON 时一定要加 ensure_ascii=False,否则中文会被转成 \uXXXX 形式。别问我是怎么知道的。

路径处理

写文件路径时最怕的就是跨平台兼容——Windows 用 \,Mac/Linux 用 /。好在两种语言都有路径处理工具:

加载代码编辑器中……
操作Python (pathlib)Node.js (path)
拼接路径Path("a") / "b"path.join("a", "b")
父目录p.parentpath.dirname(p)
文件名p.namepath.basename(p)
扩展名p.suffixpath.extname(p)
文件是否存在p.exists()fs.existsSync(p)
问问 AI

问 AI:"Python 的 pathlib 和 os.path 有什么区别?为什么 pathlib 被推荐?"

pathlib 是 Python 3.4 引入的现代路径处理方式,用 / 运算符拼接路径的写法非常优雅。了解它为什么比 os.path.join() 更好用。

实战:读写配置文件

来看一个贴近实际的例子——一个简单的"用户设置"管理器:

加载代码编辑器中……
🏋️AI 练习

动手练习:创建一个"学生成绩管理器",要求:

  1. 定义一个包含 3 个学生的成绩数据(每人有姓名、语文、数学、英语成绩)
  2. 将数据保存为 JSON 文件
  3. 从文件中读取数据
  4. 计算每个学生的平均分并打印
  5. 找出总分最高的学生

分别用 Python 和 Node.js 实现,在本地运行测试。如果遇到困难,可以问 AI 要思路提示而不是直接要答案。

小结

概念PythonNode.js
读取文件open(f, "r") + withfs.readFileSync(f, "utf-8")
写入文件open(f, "w") + withfs.writeFileSync(f, data)
追加文件open(f, "a") + withfs.appendFileSync(f, data)
读 JSONjson.load(f)JSON.parse(fs.readFileSync(f))
写 JSONjson.dump(obj, f)fs.writeFileSync(f, JSON.stringify(obj))
路径拼接Path("a") / "b"path.join("a", "b")
文件存在Path(f).exists()fs.existsSync(f)

一句话总结:Python 的 with open() 优雅安全,Node.js 的 fs 模块直接明了。无论哪种语言,文件读写都是程序与"持久化世界"沟通的桥梁。记住三件事:指定编码、处理路径、关闭文件(或者让语言帮你关)。