以下是根据您提供的《Python文件操作》文档内容,对文件操作相关概念、方法和代码的全面总结。文档主要涵盖文件编码、文件读取、写入、追加及综合案例,我将按照操作类型分类总结,并提供详细的代码示例和注意事项。
一、文件编码概述
文件编码是内容与二进制相互转换的规则,确保文件能被正确读写。
- 常见编码:UTF-8(全球通用)、GBK、Big5等。
- 核心原则:统一使用UTF-8编码避免乱码问题。
- 查看编码:使用记事本打开文件,底部状态栏显示编码格式(如UTF-8)。
二、文件操作基础步骤
文件操作需遵循三步流程:
- 打开文件:
open()函数 - 读写文件:读取或写入内容
- 关闭文件:释放资源
三、文件读取操作详解
1. 打开文件
f = open("python.txt", "r", encoding="UTF-8") # 只读模式打开
- 参数说明:
name:文件路径(可包含绝对路径)mode:访问模式(常用r为只读)encoding:编码格式(必须关键字传参)
2. 读取方法
| 方法 | 说明 | 代码示例 |
|---|---|---|
read() |
读取全部或指定字节 | f.read(10) 读10字节 |
readline() |
一次读取一行 | line = f.readline() |
readlines() |
读取全部行,返回列表 | lines = f.readlines() |
for循环 |
逐行迭代文件 | for line in f: print(line) |
3. 关闭文件
f.close() # 释放文件占用
- 注意事项:未关闭文件可能导致资源占用。
4. 自动关闭文件(推荐)
with open("python.txt", "r", encoding="UTF-8") as f:content = f.readlines() # 操作完成后自动关闭
四、文件写入操作详解
1. 写入模式(w模式)
f = open("python.txt", "w", encoding="UTF-8")
f.write("hello world") # 写入内容
f.flush() # 刷新缓冲区到磁盘
f.close()
- 特点:
- 文件不存在时创建新文件
- 文件存在时清空原内容
- 缓冲区机制:
write()先写入内存缓冲区,flush()或close()时持久化到磁盘。
2. 写入多行内容
f.write("第一行\n第二行") # 使用`\n`换行
五、文件追加操作详解
1. 追加模式(a模式)
f = open("python.txt", "a", encoding="UTF-8")
f.write("\n追加内容") # 在文件末尾添加
f.close()
- 特点:
- 文件不存在时创建新文件
- 文件存在时在末尾追加内容
六、文件操作模式总结
| 模式 | 功能 | 适用场景 |
|---|---|---|
r |
只读 | 读取文件内容,不允许修改 |
w |
写入 | 创建新文件或覆盖原有内容 |
a |
追加 | 在文件末尾添加新内容 |
七、综合案例:账单文件备份与过滤
需求描述
- 读取账单文件
bill.txt - 备份到
bill.txt.bak - 过滤掉标记为“测试”的数据行
代码实现
# 1. 打开源文件和备份文件
with open("bill.txt", "r", encoding="UTF-8") as src:with open("bill.txt.bak", "w", encoding="UTF-8") as bak:# 2. 逐行读取并过滤for line in src:if "测试" in line:continue # 跳过测试数据bak.write(line) # 写入非测试数据
- 关键逻辑:
- 使用
with open自动管理文件开关 - 通过
if "测试" in line过滤无效数据 - 逐行写入备份文件
- 使用
八、最佳实践与注意事项
- 编码统一:始终使用
encoding="UTF-8"避免乱码 - 资源管理:优先用
with open替代手动close() - 大文件处理:使用
for line in f逐行读取,避免内存溢出 - 写入效率:多次写入后统一
flush()减少磁盘操作频率
九、课后练习:单词计数
需求
统计文件word.txt中单词"itheima"的出现次数
count = 0
with open("word.txt", "r", encoding="UTF-8") as f:for line in f:count += line.count("itheima")
print(f"itheima出现次数:{count}")
以上总结涵盖了文档中所有关键操作,如需进一步了解特定方法或案例细节,可随时提问!