Python · Day 19

文本文件读写与
学习记录程序

第十九天,我第一次让程序把数据保存到文本文件。变量会在程序结束后消失,而文件中的内容能够保留,并在下一次运行时重新读取。

第一次写入文本文件

使用 open() 打开 learning_note.txt,再调用 file.write() 写入文字。encoding="utf-8" 用来正确处理中文,with 代码块结束后会自动关闭文件。

day19.py
with open("learning_note.txt", "w", encoding="utf-8") as file: # 以写入模式打开文件
    file.write("今天学习了Python写入文件\n")                 # 写入一行中文记录
print("学习记录已保存")                                      # 显示保存成功提示

第一次运行后,练习目录中出现了 learning_note.txt,文件内保存了“今天学习了Python写入文件”。这证明数据已经从程序内存进入硬盘文件。

w、a、r 三种模式

  • "w":清空原有内容后重新写入;文件不存在时会创建
  • "a":保留原有内容,在文件末尾继续追加
  • "r":只读取已经存在的文件,不修改内容

为了保存多条学习记录,程序把模式改为 "a",追加“今天还学习了文件追加”。如果连续运行三次,相同内容也会被追加三次。

day19.py
with open("learning_note.txt", "a", encoding="utf-8") as file: # 以追加模式打开原文件
    file.write("今天还学习了文件追加\n")                     # 在文件末尾增加新的一行
print("新的学习记录已追加")                                  # 显示追加成功提示

读取文件得到字符串

使用 "r" 模式和 file.read(),可以一次读取文件中的全部内容。读取结果被变量 content 接住,它的数据类型是字符串,而不是列表。

day19.py
with open("learning_note.txt", "r", encoding="utf-8") as file: # 以读取模式打开文件
    content = file.read()                                      # 把全部内容读取成字符串
print("文件中的学习记录:")                                # 输出标题提示
print(content)                                                 # 输出完整字符串

处理文件不存在的情况

"r" 模式读取不存在的文件时,错误会在执行 open() 时发生,产生 FileNotFoundError。因为文件没有成功打开,后面的 file.read() 根本不会执行。

day19.py
try:                                                       # 尝试打开并读取文件
    with open("learning_note.txt", "r", encoding="utf-8") as file: # 打开已有文件
        content = file.read()                                # 读取全部内容
except FileNotFoundError:                               # 接住文件不存在的异常
    print("读取失败,文件不存在")                         # 显示友好提示
else:                                                    # 成功读取时进入这里
    print("文件中的学习记录:")                          # 输出内容标题
    print(content)                                           # 输出读取结果

测试时先读取不存在的文件,成功进入异常分支;改回正确文件名后,又成功进入 else 并显示两行内容。

完成学习记录小程序

最后把写入和读取分别封装为 save_note()show_notes()。用户输入先由 new_note 保存,再传入写入函数;文件更新后,显示函数重新读取全部内容。

learning_diary.py
def save_note(note):                                  # 定义保存记录的函数
    with open("learning_note.txt", "a", encoding="utf-8") as file: # 追加打开文件
        file.write(note + "\n")                          # 写入记录并换行

def show_notes():                                   # 定义显示记录的函数
    try:                                                   # 尝试读取记录文件
        with open("learning_note.txt", "r", encoding="utf-8") as file: # 只读打开
            content = file.read()                            # 读取全部字符串
    except FileNotFoundError:                           # 文件不存在时进入这里
        print("暂时没有学习记录")                          # 显示提示
    else:                                                # 读取成功时进入这里
        print("全部学习记录:")                            # 输出标题
        print(content)                                       # 输出全部内容

new_note = input("请输入今天的学习记录:")                  # 获取新的字符串记录
save_note(new_note)                                          # 把记录追加进文件
show_notes()                                                 # 重新读取并显示全部记录

输入“今天学习了文件读取”后,最终文件保存了三行记录,程序也正确显示全部内容。"\n" 是换行符;如果不添加它,多条记录会直接连接在同一行。

今天真正掌握的内容

  • 文件能让数据在程序结束后继续保存
  • write() 写入字符串,read() 读取并返回字符串
  • with open(...) 离开缩进代码块后会自动关闭文件
  • FileNotFoundError 可以处理读取不存在文件的情况
  • 函数可以分别负责保存和显示,让程序职责更清楚

今天的程序第一次拥有了真正的“记忆”:输入不再只停留在变量里,而是写进文件,留给下一次运行继续使用。