第七章 文件操作
第二节 Python文件读写操作详解
概述
本节主要讲解Python中如何进行文件的读取和写入操作。文件操作是程序与外部数据交互的重要方式,掌握文件读写技术对于数据存储、处理及应用开发至关重要。本节通过系统介绍文件的打开、关闭、读写模式,以及具体读写方法,帮助考生深入理解文件操作的原理和应用,提升编程能力。
学习目标:
- 掌握文件的打开与关闭方法
- 理解不同的文件读写模式
- 熟练使用多种文件读取和写入函数
- 了解文件操作中的异常处理和注意事项
- 通过实例巩固文件操作技巧
核心概念
文件(File):存储在磁盘上的数据集合,程序通过文件进行数据的长期保存。文件可以是文本文件或二进制文件。
文件路径(Path):文件在计算机中的位置标识,分为绝对路径和相对路径。
文件打开(open):通过Python内置函数open(),以指定模式打开文件,返回文件对象,供后续操作。
文件模式(mode):指定文件操作类型,常见有:
'r'只读(默认),文件必须存在'w'只写,不存在则创建,存在则清空'a'追加写入,文件不存在则创建'b'二进制模式'+'读写模式
文件对象(File object):open()返回的对象,包含读写文件的方法和属性。
文件关闭(close):释放文件资源,确保数据完整写入,防止资源泄露。
异常处理(Exception handling):处理文件操作中可能出现的错误,如文件不存在、权限不足等。
原理分析
文件操作本质上是程序与操作系统之间的数据交互。Python的open()函数通过系统调用打开文件,返回文件描述符封装成文件对象。不同的打开模式决定了文件的读写权限和行为。通过文件对象的方法,程序可实现数据的读取和写入。
Python中文本文件默认使用Unicode编码(一般是UTF-8),读取时将字节流转换成字符流;写入时则将字符编码为字节存储。
文件关闭是必要步骤,确保缓冲区数据写入磁盘,释放系统资源。使用with语句可以自动管理文件关闭,防止忘记关闭造成资源浪费。
异常处理机制保证程序稳定运行,在文件操作中捕获特定异常并合理处理,是良好编程习惯。
详细内容
1. 文件的打开与关闭
打开文件使用open()函数,语法:
file = open(filename, mode='r', encoding=None)
参数说明:
filename:文件路径,字符串mode:文件打开模式,默认为只读encoding:编码格式,文本文件推荐指定(如utf-8)
关闭文件使用file.close(),释放资源。
推荐用法是with语句,自动关闭文件:
with open('example.txt', 'r', encoding='utf-8') as f:
data = f.read()
2. 文件读取方法
read(size):读取指定字节数或字符数,size可省略,读取整个文件readline():读取一行,包含换行符readlines():读取所有行,返回列表,每行为列表元素
注意:读取后文件指针会移动,连续调用会继续读取后续内容。
示例:
with open('data.txt', 'r', encoding='utf-8') as f:
content = f.read()
print(content)
3. 文件写入方法
write(string):写入字符串,不自动换行writelines(list_of_strings):写入字符串列表,不自动添加换行符
注意:写入文件时,文件必须以写模式或读写模式打开,且写入内容应为字符串类型。
示例:
with open('output.txt', 'w', encoding='utf-8') as f:
f.write('Hello, world!\n')
4. 文件读写模式详解
| 模式 | 说明 | 示例 |
|---|---|---|
| r | 只读,文件必须存在 | open('file.txt', 'r') |
| w | 只写,文件不存在创建,存在清空 | open('file.txt', 'w') |
| a | 追加写入,文件不存在创建 | open('file.txt', 'a') |
| rb | 只读二进制 | open('file.jpg', 'rb') |
| wb | 只写二进制 | open('file.jpg', 'wb') |
| r+ | 读写,文件必须存在 | open('file.txt', 'r+') |
| w+ | 读写,覆盖原文件 | open('file.txt', 'w+') |
| a+ | 读写,追加模式 | open('file.txt', 'a+') |
5. 文件指针和文件定位
文件操作中,文件指针指示当前读写位置。常用方法:
tell():返回当前指针位置(字节数)seek(offset, whence):移动指针,whence默认为0(文件开头),1为当前位置,2为文件末尾
示例:
with open('test.txt', 'r', encoding='utf-8') as f:
print(f.read(5)) # 读取前5个字符
print(f.tell()) # 输出5
f.seek(0) # 回到文件开头
6. 异常处理与资源管理
文件操作易出错,如文件不存在或权限不足,需捕获异常。
try:
with open('nofile.txt', 'r', encoding='utf-8') as f:
data = f.read()
except FileNotFoundError:
print('文件未找到!')
except IOError:
print('读取文件出错!')
推荐使用with语句自动管理资源,避免忘记close()。
实例分析
实例1:统计文本文件字数
背景:读取文本文件内容,统计文件中所有单词数量。
代码:
with open('sample.txt', 'r', encoding='utf-8') as f:
content = f.read()
words = content.split()
print(f'单词总数: {len(words)}')
分析:
- 使用
with保证文件关闭 read()读取全部内容- 使用
split()按空白字符分割成单词列表 - 计算列表长度获得单词数
结论:简单有效地统计文本单词数。
实例2:写入多行文本文件
背景:将列表中的多行文本写入新文件,每行单独写。
代码:
lines = ['第一行内容', '第二行内容', '第三行内容']
with open('output.txt', 'w', encoding='utf-8') as f:
for line in lines:
f.write(line + '\n')
分析:
- 文件以写模式打开,存在则覆盖
- 循环写入每行,手动添加换行符
结论:正确写入多行文本文件。
实例3:追加日志信息
背景:向日志文件追加新的日志条目,保持原有日志不变。
代码:
log_entry = '2024-06-01 10:00:00 程序启动'
with open('log.txt', 'a', encoding='utf-8') as f:
f.write(log_entry + '\n')
分析:
- 以追加模式打开文件
- 新日志写入文件末尾
结论:追加模式适合日志写入。
常见误区
忘记关闭文件
- 忘记调用
close()会导致资源泄露,文件内容可能未及时写入。 - 解决方法:使用
with语句自动关闭。
- 忘记调用
未指定编码导致乱码
- 默认编码可能与文件编码不一致,导致读取乱码。
- 解决方法:明确指定编码参数,如
encoding='utf-8'。
写入操作未转换为字符串
write()只能写字符串,直接写入非字符串(如数字、列表)会报错。- 解决方法:先用
str()转换或使用writelines()写入字符串列表。
误用文件模式
- 使用
'r'模式打开不存在文件会报错;使用'w'模式会清空文件内容。 - 解决方法:根据需求选择合适模式,避免数据丢失。
- 使用
错误处理不足
- 未捕获文件操作异常,程序崩溃。
- 解决方法:使用
try-except捕获并处理异常。
应用场景
数据持久化存储
- 程序运行结果保存至文本文件,便于后续分析。
配置文件读取
- 读取程序配置参数,实现灵活配置。
日志记录
- 记录程序运行状态,方便调试和维护。
批量文件处理
- 读取多个文件内容,实现数据整合和统计。
文本数据分析
- 读取文本进行自然语言处理、情感分析等。
知识拓展
二进制文件操作:使用
'rb'和'wb'模式读写图片、音频等二进制数据。文件路径操作:使用
os和pathlib模块处理跨平台文件路径。文件异常细化处理:分类处理
FileNotFoundError、PermissionError等异常。文件内容增量读取:使用迭代器和生成器读取大文件,避免内存溢出。
JSON和CSV文件读写:扩展文件操作到结构化数据格式处理。
总结回顾
本节详细介绍了Python文件的读写操作,涵盖文件打开、关闭、各种读写方法、文件模式、指针操作及异常处理。通过实例演示了文本文件的读取、写入和追加。指出常见误区和注意事项,帮助考生避免常见错误。结合实际应用场景,增强学习的针对性和实用性。掌握本节内容,将为后续数据处理和程序开发打下坚实基础。
良好的文件操作习惯和理解是Python程序设计的重要部分,希望考生通过本节内容系统掌握文件读写的各项技能,为全国计算机等级考试二级Python部分的顺利通过奠定基础。