文件读写
本节目标
学完这一节,你会知道:
- 如何用 Python 打开文件
- 为什么推荐使用
with open(...) - 如何读取文件内容
- 如何写入和追加内容
- 如何把待办事项保存到文本文件
文件读写能让程序把数据保存下来。否则程序一关闭,内存里的数据就没了。
先跑一个例子
新建文件 file_demo.py,写入:
with open("notes.txt", "w", encoding="utf-8") as file:
file.write("今天学习 Python 文件读写\n")
file.write("明天继续练习\n")
with open("notes.txt", "r", encoding="utf-8") as file:
content = file.read()
print(content)
运行:
python3 file_demo.py
你会看到当前文件夹里多了一个 notes.txt,终端会输出文件内容。
open() 和 with
打开文件可以这样写:
file = open("notes.txt", "r", encoding="utf-8")
content = file.read()
file.close()
但更推荐 with:
with open("notes.txt", "r", encoding="utf-8") as file:
content = file.read()
with 会在代码块结束后自动关闭文件,少一个忘记 close() 的风险。
文件模式
常见模式:
| 模式 | 含义 |
|---|---|
"r" |
读取,文件必须存在 |
"w" |
写入,会覆盖原内容,文件不存在会创建 |
"a" |
追加,在文件末尾添加内容 |
"rb" |
二进制读取 |
"wb" |
二进制写入 |
文本文件建议写上:
encoding="utf-8"
这样中文更不容易乱码。
读取文件
一次性读取全部内容:
with open("notes.txt", "r", encoding="utf-8") as file:
content = file.read()
print(content)
逐行读取:
with open("notes.txt", "r", encoding="utf-8") as file:
for line in file:
print(line.strip())
读取成列表:
with open("notes.txt", "r", encoding="utf-8") as file:
lines = file.readlines()
print(lines)
如果文件很大,优先逐行读取,不要一次性 read()。
写入文件
写入会覆盖原内容:
with open("output.txt", "w", encoding="utf-8") as file:
file.write("第一行\n")
file.write("第二行\n")
注意手动加 \n 换行。
写入多行:
lines = ["Python\n", "Flask\n", "SQLite\n"]
with open("languages.txt", "w", encoding="utf-8") as file:
file.writelines(lines)
追加文件
追加不会覆盖原内容,而是在末尾添加。
with open("notes.txt", "a", encoding="utf-8") as file:
file.write("追加一条新笔记\n")
日志、记录、待办清单经常会用追加模式。
文件不存在怎么办?
读取不存在的文件会报 FileNotFoundError。
try:
with open("missing.txt", "r", encoding="utf-8") as file:
content = file.read()
except FileNotFoundError:
print("文件不存在")
写入模式 "w" 和追加模式 "a" 会在文件不存在时自动创建文件。
逐行拆解
再看开头的例子:
with open("notes.txt", "w", encoding="utf-8") as file:
以写入模式打开 notes.txt。如果文件不存在,就创建;如果存在,就覆盖。
file.write("今天学习 Python 文件读写\n")
写入一行文字,\n 表示换行。
with open("notes.txt", "r", encoding="utf-8") as file:
再以读取模式打开同一个文件。
自己改一改
把 file_demo.py 改成:
tasks = ["学习文件读写", "完成小练习", "复习异常处理"]
with open("todo.txt", "w", encoding="utf-8") as file:
for task in tasks:
file.write(task + "\n")
with open("todo.txt", "r", encoding="utf-8") as file:
for i, line in enumerate(file, start=1):
print(f"{i}. {line.strip()}")
然后继续改:
- 用追加模式再写入一个任务
- 读取文件时跳过空行
- 输出一共有多少个任务
常见错误
1. 忘记写 encoding
读写中文文件时,建议始终写:
encoding="utf-8"
2. 写入模式覆盖原文件
"w" 会覆盖原内容。如果想保留原内容,请用 "a"。
3. 忘记换行
file.write("第一行")
file.write("第二行")
结果会连在一起。需要:
file.write("第一行\n")
file.write("第二行\n")
4. 文件路径不对
Python 会在当前运行目录寻找文件。如果找不到,先确认终端所在目录和文件位置。
小练习
练习 1:写入自我介绍
创建 intro.txt,写入三行自我介绍。
练习 2:读取并编号
读取 intro.txt,给每一行加编号输出。
练习 3:追加学习记录
每次运行程序,都往 study_log.txt 追加一条学习记录。
参考答案
练习 1:
with open("intro.txt", "w", encoding="utf-8") as file:
file.write("我叫小明\n")
file.write("我正在学习 Python\n")
file.write("我想做自动化工具\n")
练习 2:
with open("intro.txt", "r", encoding="utf-8") as file:
for i, line in enumerate(file, start=1):
print(f"{i}. {line.strip()}")
练习 3:
with open("study_log.txt", "a", encoding="utf-8") as file:
file.write("今天学习了文件读写\n")
小结
这一节你学会了:
open()可以打开文件with可以自动关闭文件"r"读取,"w"写入,"a"追加read()、逐行遍历、readlines()都可以读取文件write()和writelines()可以写入文件
下一节我们会学习路径操作。它能帮你更安全地定位文件和整理文件夹。
数据能保存下来,程序就有了记性
文件读写让程序不再健忘。今天写进 txt 的笔记,明天还能读回来,这就是很实在的进步。马哥提醒你:写中文时记得 encoding,换行时记得 ,不然文字容易排队排得很拥挤。
还没有评论,来抢沙发吧!