第五章 · 文件与IO

文件读写

本节目标

学完这一节,你会知道:

  1. 如何用 Python 打开文件
  2. 为什么推荐使用 with open(...)
  3. 如何读取文件内容
  4. 如何写入和追加内容
  5. 如何把待办事项保存到文本文件

文件读写能让程序把数据保存下来。否则程序一关闭,内存里的数据就没了。

先跑一个例子

新建文件 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. 用追加模式再写入一个任务
  2. 读取文件时跳过空行
  3. 输出一共有多少个任务

常见错误

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")

小结

这一节你学会了:

  1. open() 可以打开文件
  2. with 可以自动关闭文件
  3. "r" 读取,"w" 写入,"a" 追加
  4. read()、逐行遍历、readlines() 都可以读取文件
  5. write()writelines() 可以写入文件

下一节我们会学习路径操作。它能帮你更安全地定位文件和整理文件夹。

数据能保存下来,程序就有了记性

文件读写让程序不再健忘。今天写进 txt 的笔记,明天还能读回来,这就是很实在的进步。马哥提醒你:写中文时记得 encoding,换行时记得 ,不然文字容易排队排得很拥挤。

讨论 (0)

还没有评论,来抢沙发吧!