课程 16:文件操作(File I/O)

学习目标

1. 文件操作基础

1.1 什么是文件操作?

定义: 文件操作是指对磁盘上的文件进行读取和写入,常用于数据持久化、日志记录、数据交换等。
# 文件路径可以是相对路径或绝对路径
# 常见模式:'r' 只读,'w' 写入(覆盖),'a' 追加,'b' 二进制

1.2 打开与关闭文件

# 打开文件(推荐使用with自动关闭文件)
with open('data.txt', 'r', encoding='utf-8') as f:
    # 文件操作
    pass
# 传统方式
f = open('data.txt', 'r', encoding='utf-8')
f.close()
常用模式:
'r' 只读
'w' 写入(覆盖)
'a' 追加写入
'b' 二进制模式(如 'rb', 'wb')

2. 文件读取操作

2.1 读取全部内容

with open('data.txt', 'r', encoding='utf-8') as f:
    content = f.read()
    print(content)

2.2 逐行读取

with open('data.txt', 'r', encoding='utf-8') as f:
    for line in f:
        print(line.strip())

2.3 读取部分内容

with open('data.txt', 'r', encoding='utf-8') as f:
    first10 = f.read(10)  # 读取前10个字符
    print(first10)
常用方法:
read() 读取全部
readline() 读取一行
readlines() 读取所有行为列表
with open('data.txt', 'r', encoding='utf-8') as f:
    lines = f.readlines()
    print(lines)

3. 文件写入操作

3.1 覆盖写入

with open('output.txt', 'w', encoding='utf-8') as f:
    f.write('Hello, world!\n')

3.2 追加写入

with open('output.txt', 'a', encoding='utf-8') as f:
    f.write('追加内容\n')

3.3 写入多行

lines = ['第一行\n', '第二行\n', '第三行\n']
with open('output.txt', 'w', encoding='utf-8') as f:
    f.writelines(lines)
注意: writelines() 不会自动加换行符,需手动添加。

4. 二进制文件操作

4.1 读取与写入二进制文件

# 读取图片、音频等二进制文件
with open('image.png', 'rb') as f:
    data = f.read()
# 写入二进制文件
with open('copy.png', 'wb') as f:
    f.write(data)
常见应用:
• 图片、音频、视频、压缩包等文件的读写

5. 文件操作的常见错误与调试

try:
    with open('nofile.txt', 'r', encoding='utf-8') as f:
        content = f.read()
except FileNotFoundError:
    print('文件不存在!')

6. 实际应用案例

6.1 日志记录

def log_message(msg):
    with open('log.txt', 'a', encoding='utf-8') as f:
        f.write(msg + '\n')
log_message('程序启动')

6.2 数据持久化

# 保存和读取用户分数
score = 95
with open('score.txt', 'w', encoding='utf-8') as f:
    f.write(str(score))
with open('score.txt', 'r', encoding='utf-8') as f:
    saved_score = int(f.read())
print(saved_score)

6.3 文本文件批量处理

# 统计文本文件的行数和单词数
def count_file(filename):
    lines = 0
    words = 0
    with open(filename, 'r', encoding='utf-8') as f:
        for line in f:
            lines += 1
            words += len(line.split())
    return lines, words
print(count_file('data.txt'))

7. 编程练习与挑战

练习1:基础操作

练习2:进阶技巧

练习3:实战项目

8. 综合作业与项目

作业16:文件操作综合应用

任务1:文本文件批量处理工具

实现一个工具,支持批量读取多个文本文件,统计每个文件的行数、单词数,并输出总计。

任务2:二进制文件复制器

编写一个程序,能够复制任意二进制文件(如图片、音频等)。

任务3:日志分析与可视化

实现一个日志分析工具,统计不同类型日志的数量,并生成简单的可视化报表(如文本直方图)。

学习建议:文件操作是Python编程中非常实用的技能,建议多动手实践,理解文件I/O的各种模式和常见错误,遇到问题要学会查文档和调试。
思考题:文件操作时如何保证数据安全?如何处理大文件的读取和写入?在实际开发中,如何选择文本文件和二进制文件?