在 Python 中,文本与二进制文件的读写通过内置函数 open 完成:指定路径与模式后得到文件对象,再调用 read、write 等方法。使用完毕后须关闭文件;推荐使用 with open(...),离开语句块时自动关闭。处理中文文本时,宜显式指定 encoding="utf-8"。本节说明打开模式、常见读写方式及编码注意点。

写入与读取示例

先用 "w" 写入两行,再用 "r" 读取全文。下列示例手动调用 close();后续将改用 with:

f = open("demo.txt", "w")
f.write("Hello file!\n第二行\n")
f.close()

f = open("demo.txt", "r")
print(f.read())
f.close()

输出:

Hello file!
第二行

打开模式

模式说明
"r"只读(默认),文件须已存在
"w"只写,若文件存在则清空后重写;不存在则创建
"a"在末尾追加;不存在则创建
"x"仅当文件不存在时创建,已存在则报错
"r+"读写
"b"二进制,常与 "r"、"w" 等组合,如 "rb"、"wb"

"w" 会清除原有内容。若须在末尾续写日志,应使用 "a",勿误用 "w"。

几种读法

read() 一次读取全部内容,适合小文件。readline() 读取一行。对文件对象直接 for line in f 按行迭代,大文件更省内存。读指针移动后,可用 seek(0) 回到开头:

f = open("demo.txt", "r")

print(f.read())
f.seek(0)
print(f.readline())
f.seek(0)
for line in f:
    print(line.strip())

f.close()

with 语句:自动关闭

未关闭文件可能长时间占用句柄。使用 with 包裹读写,离开缩进块时自动关闭,异常退出时同样会关闭:

with open("demo.txt", "r") as f:
    print(f.read())

with open("note.txt", "w", encoding="utf-8") as f:
    f.write("第一行\n")
    f.write("第二行\n")
print("写入完成")

中文与编码

在 Windows 等环境中,未指定编码时默认编码可能不是 UTF-8,中文易出现乱码。读写文本文件时建议写明编码:

with open("cn.txt", "w", encoding="utf-8") as f:
    f.write("你好,世界\n")

追加写入

"a" 模式将新内容接在文件末尾,适用于日志等场景:

with open("log.txt", "a", encoding="utf-8") as f:
    f.write("2024-01-01: 系统启动\n")

判断文件是否存在

import os

if os.path.exists("demo.txt"):
    print("文件存在")
else:
    print("文件不存在")

以只读方式打开不存在的路径将引发 FileNotFoundError,可先判断路径,或使用 try/except 处理。目录创建、移动与递归遍历见文件与目录管理。

常见错误

  • 以 "r" 打开不存在的文件将引发 FileNotFoundError。
  • 误用 "w" 会清空已有内容;须保留旧数据时使用 "a" 或先备份。
  • 手动 open 后须关闭;优先使用 with open(...)。

本节说明了 Python 中 open、读写模式与 with 的用法。下一节介绍文件与目录管理:os 与 shutil 的常见操作。