目录

一、文件的编码

二、文件的读取

1. open() 打开函数

2. 三种基础访问模式

3. 文件读取方法

4. close() 关闭文件

5. with open 语法(推荐)

练习:单词计数

三、文件的写入

1. 写入模式(w)

2. write() 和 flush()

3. 注意事项

四、文件的追加

追加模式(a)

写入换行

五、文件操作综合案例

需求:文件备份 + 过滤测试数据

六、文件操作速查表

1. 打开模式

2. 常用方法

3. 推荐写法

4. 注意事项


一、文件的编码

编码:将内容翻译成二进制,以及将二进制翻译回可识别内容的规则。

常用编码:

  • UTF-8:全球通用,推荐使用

  • GBK:中文编码

  • Big5:繁体中文编码

# 查看文件编码方式
# 在Windows记事本中打开文件 -> 另存为 -> 查看编码
​
# 打开文件时指定编码
f = open("test.txt", "r", encoding="UTF-8")

二、文件的读取

1. open() 打开函数

语法

open(name, mode, encoding)
参数 说明
name 文件名(可包含路径)
mode 打开模式
encoding 编码格式(推荐UTF-8)

2. 三种基础访问模式

模式 说明
r 只读模式
w 写入模式(会清空原有内容)
a 追加模式

3. 文件读取方法

假设有一个文件 test.txt,内容如下:

hello world
abcdefg
aaa
bbb
ccc
# 1. read() - 读取指定字节数
f = open("test.txt", "r", encoding="UTF-8")
content = f.read(5)      # 读取5个字节
print(content)           # hello
f.close()
​
# 2. read() - 读取全部内容
f = open("test.txt", "r", encoding="UTF-8")
content = f.read()
print(content)
# hello world
# abcdefg
# aaa
# bbb
# ccc
f.close()
​
# 3. readlines() - 按行读取,返回列表
f = open("test.txt", "r", encoding="UTF-8")
lines = f.readlines()
print(lines)   # ['hello world\n', 'abcdefg\n', 'aaa\n', 'bbb\n', 'ccc']
f.close()
​
# 4. readline() - 一次读取一行
f = open("test.txt", "r", encoding="UTF-8")
line1 = f.readline()
line2 = f.readline()
line3 = f.readline()
print(f"第一行:{line1}")   # 第一行:hello world
print(f"第二行:{line2}")   # 第二行:abcdefg
print(f"第三行:{line3}")   # 第三行:aaa
f.close()
​
# 5. for循环读取(推荐)
f = open("test.txt", "r", encoding="UTF-8")
for line in f:
    print(line, end="")    # 逐行打印,end=""避免重复换行
f.close()

4. close() 关闭文件

f = open("test.txt", "r", encoding="UTF-8")
content = f.read()
print(content)
f.close()   # 必须关闭,否则文件一直被占用

5. with open 语法(推荐)

自动关闭文件,不需要手动调用 close()

# 使用with open,自动关闭文件
with open("test.txt", "r", encoding="UTF-8") as f:
    content = f.read()
    print(content)
# 离开with代码块后,文件自动关闭
​
# 逐行读取
with open("test.txt", "r", encoding="UTF-8") as f:
    for line in f:
        print(line, end="")

练习:单词计数

统计 word.txt 中 "itheima" 出现的次数

# 准备文件内容
file_content = """itheima itcast python
itheima python itcast
beijing shanghai itheima
shenzhen guangzhou itheima
wuhan hangzhou itheima
zhengzhou bigdata itheima"""
​
# 写入文件(模拟已有文件)
with open("word.txt", "w", encoding="UTF-8") as f:
    f.write(file_content)
​
# 统计单词次数
count = 0
with open("word.txt", "r", encoding="UTF-8") as f:
    for line in f:
        # 方法1:使用count
        count += line.count("itheima")
        
        # 方法2:使用split分割后统计
        # words = line.split()
        # count += words.count("itheima")
​
print(f"itheima出现的次数:{count}")   # itheima出现的次数:6

三、文件的写入

1. 写入模式(w

  • 文件不存在 → 创建新文件

  • 文件存在 → 清空原有内容后写入

# 1. 基本写入
f = open("write.txt", "w", encoding="UTF-8")
f.write("hello world")
f.flush()    # 刷新内容到硬盘
f.close()    # close自带flush功能
​
# 2. 写入多行
f = open("write.txt", "w", encoding="UTF-8")
f.write("第一行\n")
f.write("第二行\n")
f.write("第三行")
f.close()
​
# 查看结果
with open("write.txt", "r", encoding="UTF-8") as f:
    print(f.read())
# 输出:
# 第一行
# 第二行
# 第三行

2. write() 和 flush()

  • write():将内容写入缓冲区(内存),不直接写入硬盘

  • flush():将缓冲区内容刷新到硬盘

  • close():自带 flush() 功能

# 演示缓冲区
f = open("buffer.txt", "w", encoding="UTF-8")
f.write("这行还没有写入硬盘")
# 此时查看文件,内容为空
f.flush()
# 此时内容已写入硬盘
f.close()

3. 注意事项

# w模式会清空原有内容
# 执行前 write.txt 内容为 "原有内容"
f = open("write.txt", "w", encoding="UTF-8")
f.write("新内容")
f.close()
# 执行后 write.txt 内容为 "新内容"(原有内容被清空)

四、文件的追加

追加模式(a

  • 文件不存在 → 创建新文件

  • 文件存在 → 在末尾追加内容

# 1. 追加写入
f = open("append.txt", "a", encoding="UTF-8")
f.write("第一行追加内容\n")
f.write("第二行追加内容")
f.close()
​
# 2. 多次追加
with open("append.txt", "a", encoding="UTF-8") as f:
    f.write("第三次追加\n")
    f.write("第四次追加")
​
# 查看结果
with open("append.txt", "r", encoding="UTF-8") as f:
    print(f.read())

写入换行

# 使用 \n 换行
with open("lines.txt", "w", encoding="UTF-8") as f:
    f.write("第一行\n")
    f.write("第二行\n")
    f.write("第三行\n")
​
# 结果:
# 第一行
# 第二行
# 第三行

五、文件操作综合案例

需求:文件备份 + 过滤测试数据

原始文件 bill.txt 内容:

name,date,money,type,remarks
周杰轮,2022-01-01,100000,消费,正式
周杰轮,2022-01-02,300000,收入,正式
周杰轮,2022-01-03,100000,消费,测试
林俊节,2022-01-01,300000,收入,正式
林俊节,2022-01-02,100000,消费,测试
林俊节,2022-01-03,100000,消费,正式
林俊节,2022-01-04,100000,消费,测试
林俊节,2022-01-05,500000,收入,正式
张学油,2022-01-01,100000,消费,正式
张学油,2022-01-02,500000,收入,正式
张学油,2022-01-03,900000,收入,测试
王力鸿,2022-01-01,500000,消费,正式
王力鸿,2022-01-02,300000,消费,测试
王力鸿,2022-01-03,950000,收入,正式
刘德滑,2022-01-01,300000,消费,测试
刘德滑,2022-01-02,100000,消费,正式
刘德滑,2022-01-03,300000,消费,正式

需求

  1. 读取 bill.txt 文件

  2. 将内容写入 bill.txt.bak 作为备份

  3. 过滤掉 remarks 列为 "测试" 的数据行

# 创建原始文件
bill_content = """name,date,money,type,remarks
周杰轮,2022-01-01,100000,消费,正式
周杰轮,2022-01-02,300000,收入,正式
周杰轮,2022-01-03,100000,消费,测试
林俊节,2022-01-01,300000,收入,正式
林俊节,2022-01-02,100000,消费,测试
林俊节,2022-01-03,100000,消费,正式
林俊节,2022-01-04,100000,消费,测试
林俊节,2022-01-05,500000,收入,正式
张学油,2022-01-01,100000,消费,正式
张学油,2022-01-02,500000,收入,正式
张学油,2022-01-03,900000,收入,测试
王力鸿,2022-01-01,500000,消费,正式
王力鸿,2022-01-02,300000,消费,测试
王力鸿,2022-01-03,950000,收入,正式
刘德滑,2022-01-01,300000,消费,测试
刘德滑,2022-01-02,100000,消费,正式
刘德滑,2022-01-03,300000,消费,正式"""
​
with open("bill.txt", "w", encoding="UTF-8") as f:
    f.write(bill_content)
​
# 文件备份和过滤
with open("bill.txt", "r", encoding="UTF-8") as read_f:
    with open("bill.txt.bak", "w", encoding="UTF-8") as write_f:
        for line in read_f:
            # 检查是否是测试数据(最后一列是"测试")
            if line.strip() and line.split(",")[-1].strip() == "测试":
                continue   # 跳过测试数据
            write_f.write(line)
​
print("备份完成,已过滤测试数据")
​
# 查看备份文件内容
print("\n备份文件内容:")
with open("bill.txt.bak", "r", encoding="UTF-8") as f:
    print(f.read())

输出

备份完成,已过滤测试数据
​
备份文件内容:
name,date,money,type,remarks
周杰轮,2022-01-01,100000,消费,正式
周杰轮,2022-01-02,300000,收入,正式
林俊节,2022-01-01,300000,收入,正式
林俊节,2022-01-03,100000,消费,正式
林俊节,2022-01-05,500000,收入,正式
张学油,2022-01-01,100000,消费,正式
张学油,2022-01-02,500000,收入,正式
王力鸿,2022-01-01,500000,消费,正式
王力鸿,2022-01-03,950000,收入,正式
刘德滑,2022-01-02,100000,消费,正式
刘德滑,2022-01-03,300000,消费,正式

六、文件操作速查表

1. 打开模式

模式 说明 文件不存在 文件存在
r 只读 报错 正常读取
w 写入 创建 清空后写入
a 追加 创建 末尾追加

2. 常用方法

方法 说明
read() 读取全部或指定字节
readline() 读取一行
readlines() 读取所有行,返回列表
write() 写入内容
flush() 刷新缓冲区
close() 关闭文件

3. 推荐写法

# 方式1:with open(自动关闭)
with open("file.txt", "r", encoding="UTF-8") as f:
    content = f.read()
​
# 方式2:传统写法(需要手动关闭)
f = open("file.txt", "r", encoding="UTF-8")
content = f.read()
f.close()

4. 注意事项

# 1. 编码问题:始终指定encoding="UTF-8"
f = open("file.txt", "r", encoding="UTF-8")
​
# 2. 文件路径
# 同级目录:直接写文件名
# 相对路径:./folder/file.txt
# 绝对路径:C:/Users/name/file.txt
​
# 3. 换行符:使用 \n
f.write("第一行\n第二行\n")
​
# 4. 关闭文件:with open 自动处理
# 5. 读取大文件:逐行读取,不要一次性读取全部

更多推荐