Python3 文件读写 File
程序要长期保存数据(日志、配置、用户信息)就得写文件;读取已有数据则要读文件。 Python 的 open() 函数配合文件对象方法,即可完成几乎所有文件读写需求。
open() 打开文件与模式表
f = open("data.txt", "r") # 只读模式(默认)
f = open("data.txt", "w") # 写模式:不存在则创建,存在则清空
f = open("data.txt", "a") # 追加模式:从文件末尾写入
f = open("data.txt", "r+") # 读写模式
f = open("img.png", "rb") # 二进制只读(图片/音频等)
f = open("data.txt", "w", encoding="utf-8") # 指定编码
模式表:r 只读、w 覆盖写、a 追加、r+ 读写、x 新建独占;加 b 表示二进制,加 + 表示可读可写,b 模式用于处理文本之外的字节数据。
读文件的方法
f = open("poem.txt", "r", encoding="utf-8")
text = f.read() # 一次读全部内容(字符串)
line = f.readline() # 读一行
lines = f.readlines() # 读全部行,返回列表
print(lines)
f.close() # 用完关闭,释放资源
with 语句自动关闭
忘记 close() 可能造成资源泄漏或数据丢失,推荐用 with:块结束自动关闭文件:
with open("poem.txt", "r", encoding="utf-8") as f:
content = f.read()
print(content)
# 缩进块结束,文件已自动关闭
写文件的方法
with open("log.txt", "w", encoding="utf-8") as f:
f.write("第一行\n") # 写字符串
f.writelines(["第二行\n", "第三行\n"]) # 写字符串列表
writelines 不会自动补换行,需自己写 \n;上例表示以 UTF-8 编码写入三行日志。
逐行遍历大文件
超大文件不能一次 read() 进内存,应逐行迭代:
with open("big.log", "r", encoding="utf-8") as f:
for line in f: # 文件对象本身可迭代
print(line.strip()) # strip() 去掉行尾换行
seek 与 tell:文件指针
with open("data.txt", "r+", encoding="utf-8") as f:
print(f.tell()) # 输出:0,当前指针位置
f.read(3) # 读 3 个字符
print(f.tell()) # 输出:3,指针前移
f.seek(0) # 指针跳回开头
编码参数 encoding
读写中文文件强烈建议显式指定 utf-8,否则 Windows 默认编码可能造成乱码:
with open("note.txt", "w", encoding="utf-8") as f:
f.write("中文内容")
示例:复制文件
with open("src.txt", "r", encoding="utf-8") as src, \
open("dst.txt", "w", encoding="utf-8") as dst:
dst.write(src.read())
小结:选对模式 + 指定 utf-8 编码 + 用 with 管理文件生命周期;读大文件逐行遍历, 小文件直接 read()/readlines() 即可。