Python 基础 - 第十二节


📋 本节要点

知识点 说明
open() 打开文件
r 只读模式
w 写入模式(覆盖)
a 追加模式
b 二进制模式
read() 读取全部内容
readline() 读取一行
readlines() 读取所有行
write() 写入文件
with 自动关闭文件

1. 文件操作概述

文件操作允许程序读取或写入文件,实现数据的持久化存储。

1.1 基本流程

# 1. 打开文件
f = open("文件名", "模式")

# 2. 操作文件(读/写)

# 3. 关闭文件
f.close()

2. 文件打开模式

模式 说明 文件不存在
r 只读模式 报错
w 写入模式(覆盖) 创建新文件
a 追加模式 创建新文件
r+ 读写模式 报错
w+ 读写模式(覆盖) 创建新文件
a+ 读写追加模式 创建新文件
rb 二进制只读 报错
wb 二进制写入 创建新文件

3. 读取文件

3.1 read() - 读取全部内容

f = open("test.txt", "r", encoding="utf-8")
content = f.read()
print(content)
f.close()

注意:建议指定 encoding="utf-8" 避免编码问题。

3.2 readline() - 读取一行

f = open("test.txt", "r", encoding="utf-8")
line1 = f.readline()
line2 = f.readline()
print("第一行:", line1)
print("第二行:", line2)
f.close()

3.3 readlines() - 读取所有行

f = open("test.txt", "r", encoding="utf-8")
lines = f.readlines()
for i, line in enumerate(lines):
    print(f"第{i+1}行:", line, end="")
f.close()

4. 写入文件

4.1 write() - 写入内容

f = open("output.txt", "w", encoding="utf-8")
f.write("第一行内容\n")
f.write("第二行内容")
f.close()

print("写入完成!")

注意:\n 表示换行,需要手动添加。

4.2 writelines() - 写入多行

f = open("output.txt", "w", encoding="utf-8")
lines = ["第一行内容\n", "第二行内容\n", "第三行内容"]
f.writelines(lines)
f.close()

4.3 追加模式 a

f = open("output.txt", "a", encoding="utf-8")
f.write("\n这是追加的内容")
f.close()

5. with 语句(上下文管理器)

使用 with 语句可以自动关闭文件,即使发生异常也会正确关闭。

# 基本语法
with open("test.txt", "r", encoding="utf-8") as f:
    content = f.read()
    print(content)
# 文件自动关闭,不需要手动 f.close()

推荐写法:

# 读取文件
with open("test.txt", "r", encoding="utf-8") as f:
    content = f.read()
    print(content)

# 写入文件
with open("output.txt", "w", encoding="utf-8") as f:
    f.write("写入内容")

6. 实战案例:文件复制

# 复制文件内容
def copy_file(source, target):
    with open(source, "r", encoding="utf-8") as f:
        content = f.read()

    with open(target, "w", encoding="utf-8") as f:
        f.write(content)

    print(f"已将 {source} 复制到 {target}")

# 测试
copy_file("test.txt", "test_copy.txt")

7. 实战案例:读取多行并统计

with open("test.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()

print(f"总行数:{len(lines)}")
print("内容预览:")
for i, line in enumerate(lines[:5]):
    print(f"  {i+1}: {line}", end="")

下一节预告:赋值运算符与数值运算