文本文件读写与
学习记录程序
第十九天,我第一次让程序把数据保存到文本文件。变量会在程序结束后消失,而文件中的内容能够保留,并在下一次运行时重新读取。
第一次写入文本文件
使用 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可以处理读取不存在文件的情况- 函数可以分别负责保存和显示,让程序职责更清楚
今天的程序第一次拥有了真正的“记忆”:输入不再只停留在变量里,而是写进文件,留给下一次运行继续使用。