在Python中写文件与使用上下文管理器

今天,我们将继续学习写入和追加文件,同时掌握上下文管理器以安全地处理文件。


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

 

  • 构建一个简单的日志记录器,将时间戳和消息写入文件。
  • 将一系列名字逐行写入文件,然后再追加更多名字。

 


更多