今天,我们将继续学习写入和追加文件,同时掌握上下文管理器以安全地处理文件。
📥 1. 使用open()
写入文件
要创建或覆盖一个文件,请使用"w"
模式:
# 创建一个新文件或覆盖现有文件
with open("output.txt", "w") as f:
f.write("Hello, World!\n")
f.write("这将覆盖文件内容。\n")
✅ 注意: "w"
模式在写入之前会清除所有现有内容。
📄 2. 追加内容到文件
要在不删除现有数据的情况下添加内容,请使用 "a"
模式:
with open("output.txt", "a") as f:
f.write("Appending a new line.\n")
✅ "a"
保留旧数据,并在末尾添加新内容。
🔁
3. 写多行
🔁
您可以使用 writelines()
来写入字符串列表:
lines = ["第一行\n", "第二行\n", "第三行\n"]
with open("output.txt", "w") as f:
f.writelines(lines)
🧠 4. 使用上下文管理器 (with
)
你可能会注意到我们到处都在使用 with open(...) as f:
。这就是一个 上下文管理器。
为什么使用 with
?
- 自动关闭文件。
- 防止资源泄漏。
- 优雅地处理错误。
with open("example.txt", "w") as f:
f.write("安全且干净的文件处理!")
不需要调用 `f.close()` — Python 会为你处理这一切。
5. 写入不同数据类型
您只能将字符串写入文件。对于其他类型,请进行转换:
data = {"name": "Alice", "age": 30}
with open("data.txt", "w") as f:
f.write(str(data))
对于结构化数据,考虑使用 JSON(第 36 天已涵盖此内容)。
🔄 6. 安全处理错误
在处理文件写入时,始终处理异常:
try:
with open("output.txt", "w") as f:
f.write("重要数据")
except IOError:
print("写入文件时出错!")
🛠️ 现实世界示例:日志系统
from datetime import datetime
def log_event(message):
with open("log.txt", "a") as f:
f.write(f"[{datetime.now()}] {message}\n")
log_event("User logged in")
这段代码定义了一个记录事件的函数 `log_event`,它接受一个消息参数。在函数内部,使用 `with` 语句打开一个名为 `log.txt` 的文件,并以追加模式(”a”)进行写入。然后,函数将当前的日期和时间以及传入的消息写入文件中,格式为 `[时间] 消息`,并在末尾添加换行符。最后,调用 `log_event` 函数记录用户登录事件。
log_event("用户上传了一个文件")
📜 摘要
"w"
= 写入(创建/覆盖文件)"a"
= 追加(向现有文件添加内容)- 始终使用
with open()
自动管理资源。 - 在写入之前转换非字符串数据。
- 使用错误处理以避免在文件操作期间崩溃。
🧪 实践挑战
- 创建一个程序,将用户输入写入文件,直到他们输入
"exit"
。
- 构建一个简单的日志记录器,将时间戳和消息写入文件。
- 将一系列名字逐行写入文件,然后再追加更多名字。