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"二进制,常与其它字母组合,如 "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:自动关闭

漏写 close() 会长时间占用句柄。用 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(...)