文件写入 -- 像在笔记本上写字
困难3文件写入——像在笔记本上写字
你有没有过这样的经历?在游戏里打赢了 BOSS,想记下这次胜利的时间;或者想写一篇日记,下次打开还能看到。用 Python 往文件里写内容,就像你拿出一个笔记本,在上面写下你想保存的东西。这样,程序运行完,数据也不会丢失。
文件写入有两种模式,就像你对待笔记本的态度不同:一种是打开一本新本子,把旧的一页撕掉,从头写;另一种是在已经写满的笔记本后面接着写。
两种写入模式:"w" 和 "a"
1. 写入模式 "w"(write)
- 作用:创建一个新文件,或者把一个已有的文件清空,然后从头开始写。
- 类比:你有一个旧的日记本,你想换一个全新的心情,于是把旧的那一页撕掉(或者直接擦干净),再开始写新内容。
- 警告:如果文件名和已有文件相同,原来的内容会被完全删除,无法恢复!
# 用 w 模式写一个新文件
with open("notes.txt", "w") as f: # "w" 表示写入模式
f.write("今天天气真好!\n") # 写第一行,\n 表示换行
f.write("我学会了写文件。\n") # 写第二行
运行后,notes.txt 里面只有这两行。如果这个文件原来有内容,也会被清空。
2. 追加模式 "a"(append)
- 作用:在文件的末尾继续添加内容,不会删除原来的内容。
- 类比:你已经写了一页日记,还想在后面再接一张纸,接着写下去,保留之前的所有回忆。
- 优点:安全,不会误删数据。
# 用 a 模式在原文件末尾追加
with open("notes.txt", "a") as f: # "a" 表示追加模式
f.write("又写了一句。\n") # 在末尾加一行
原来的两行还在,现在文件变成了三行。每次运行这段代码,都会在最后加一行。
基础写入:write() 和换行符 \n
write() 方法一次只能写一个字符串。注意,它不会自动换行,需要你自己在字符串末尾加上 \n。
\n是一个特殊符号,叫做换行符。它就像你在键盘上按了“回车”键,让后面的内容从新的一行开始。- 如果不加
\n,所有内容会挤在一行,像这样:
with open("hello.txt", "w") as f:
f.write("苹果")
f.write("香蕉")
f.write("橘子")
打开文件,你会看到:苹果香蕉橘子(全粘在一起)。所以在写每一行时,记得加 \n。
with open("hello.txt", "w") as f:
f.write("苹果\n")
f.write("香蕉\n")
f.write("橘子\n")
现在文件里是:
苹果
香蕉
橘子
一次写多行:writelines()
如果你早就准备好了一个列表(比如你列好的购物清单、要写的诗),想一口气全写进去,可以用 writelines() 方法。
- 注意:
writelines()不会自动加换行,你必须自己在每个字符串末尾加上\n,否则它们会首尾相连。
# 准备一个水果清单
lines = ["苹果\n", "香蕉\n", "橘子\n"] # 每个后面加换行符
with open("fruits.txt", "w") as f:
f.writelines(lines) # 把列表里所有的行写进去
文件内容:
苹果
香蕉
橘子
如果你忘了加
\n,比如lines = ["苹果", "香蕉", "橘子"],那么文件里就是苹果香蕉橘子,完全分不开。
小技巧:用 print() 写入文件
你平时用的 print() 函数也能往文件里写,只要加上 file 参数。这样可以省去手动加 \n 的麻烦,因为 print() 默认会换行。
with open("output.txt", "w") as f:
print("你好,世界!", file=f) # 自动加换行
print("这是第二行。", file=f)
运行后,output.txt 里有两行。用 print() 写文件特别适合输出格式化的内容,比如游戏得分、排行榜等。
文件会自动关闭吗?—— with 语句的作用
每次打开文件后,用完都应该关闭。关闭文件就像合上笔记本,让系统知道你已经写完了。如果忘记关,可能会在程序意外结束时丢失数据。
with open(...) as f: 这种写法,会在代码块结束时自动关闭文件,你不用再手动调用 f.close()。养成用 with 的习惯,是最安全、最方便的。
如果不小心写了 f = open(...) 而没有 with,一定要记得加 f.close()。不过建议直接使用 with。
常见错误与避坑指南
错误1:忘记加换行符
# 错误示范
with open("wrong.txt", "w") as f:
f.write("苹果")
f.write("香蕉") # 结果:苹果香蕉挤一起
修正:每个 write 里加 \n,或者用 print(file=f)。
错误2:用 "w" 覆盖了重要文件
# 假设你有一个重要的 score.txt 记录你的游戏分数
with open("score.txt", "w") as f:
f.write("0\n") # 糟糕,原来存的最高分被清掉了!
解决:在不确定时先用 "a" 追加,或者先备份文件。养成先读后写的习惯。
错误3:文件名写错,导致新建了一个空文件
with open("scor.txt", "w") as f: # 原意是 score.txt,但写成了 scor.txt
f.write("100")
解决:仔细检查文件名,或者在运行前用 os.path.exists() 检查文件是否存在。
错误4:中文乱码
如果文件里有中文,打开后看到一堆乱码,通常是因为编码不一致。在 open() 里加上 encoding='utf-8' 可以解决大部分问题。
with open("中文日记.txt", "w", encoding='utf-8') as f:
f.write("今天很开心。\n")
这样无论在哪台电脑打开,中文都能正常显示。
完整示例:做一个简单的日记本
下面是一个完整的程序,让用户输入内容,每次运行都会在末尾追加到 diary.txt 里,就像你每天写日记一样。
# 日记本程序:把输入内容追加到文件
print("=== 简单日记本 ===")
message = input("请输入今天发生的事情:") # 用户输入
with open("diary.txt", "a", encoding='utf-8') as f: # 追加模式,指定编码
f.write(message + "\n") # 写入内容并换行
print("日记已保存!")
运行之后,查看 diary.txt 文件,你每次输入的内容都会按顺序排好。你可以用记事本打开看看。
如果你想每次保存时也记录日期和时间,可以先用 import datetime 获取当前时间,再一起写进去:
import datetime
now = datetime.datetime.now()
time_str = now.strftime("%Y-%m-%d %H:%M") # 格式:2025-04-10 14:30
entry = input("写点什么:")
with open("diary.txt", "a", encoding='utf-8') as f:
f.write(f"[{time_str}] {entry}\n") # 如:[2025-04-10 14:30] 今天真棒!
print("已保存。")
相关知识指引
- 文件读取:学会了写,当然还要学会看。试试
open("文件名", "r")用read()或readlines()读出内容。 - 文件路径:如果文件不在当前运行的目录下,需要写完整路径,比如
"C:/我的文档/data.txt",或者用os模块处理。 - 二进制文件:图片、音乐、视频是二进制文件,要用
"wb"或"ab"模式写入。 - with 语句:理解
with为什么能自动关闭文件,可以把它看作“安全保险”(上下文管理器)。 - 数据持久化:把程序里的变量保存到文件里(比如游戏进度),下次启动再读出来,就是简单的数据持久化。
现在你已经掌握了文件写入的两种基本模式、靠谱的 with 语句、以及换行符和编码的小窍门。大胆去尝试吧——写个备忘录、记录游戏成绩、甚至写一个自动写故事的小程序!
例题精讲
在Python中,使用open()函数打开文件进行写入时,若希望每次写入都覆盖文件原有内容,应使用哪种打开模式?
使用 with 语句打开文件进行写入时,Python 会自动关闭文件,不需要手动调用 close() 方法。
以下代码想把“Hello”和“World”分两行写入文件 output.txt,请补全空缺内容。
with open("output.txt", "w") as f:
f.write("Hello" + ___)
f.write("World")要将一个字符串列表 `lines = ["第一行", "第二行", "第三行"]` 中的每个元素作为独立行写入文件,最合适的方法是?
以下代码尝试打开一个不存在的文件 "notes.txt" 进行写入,并写入内容 "Python很有趣"。请补全 open() 函数的参数。
with open("notes.txt", ___) as f:
f.write("Python很有趣")