Python3中进行文件读取操作是日常开发中非常常见的需求,无论是处理配置文件、日志文件还是用户上传的数据文件,都需要用到文件读取的相关能力。文件读取的核心是通过内置的open函数打开目标文件,再调用对应的读取方法获取内容,最后完成文件的关闭操作。

基础文件读取方法
使用open函数直接读取
open函数是Python3中用于打开文件的内置函数,它接收文件路径和打开模式作为参数,返回文件对象,之后就可以通过文件对象的方法读取内容。打开模式中,r表示以只读模式打开文本文件,是读取文件时最常用的模式。
读取完成后需要手动调用close方法关闭文件,释放系统资源,否则可能会导致资源泄露。以下是基础的文件读取示例:
# 打开当前目录下的test.txt文件,只读模式
file_obj = open("test.txt", "r", encoding="utf-8")
# 读取文件全部内容
content = file_obj.read()
# 打印内容
print(content)
# 手动关闭文件
file_obj.close()
使用with语句安全读取
手动调用close方法容易遗漏,尤其是代码出现异常时,close可能不会被执行。使用with语句可以自动管理文件资源,在代码块执行结束后自动关闭文件,不需要手动调用close,是更推荐的读取方式。
# 使用with语句打开文件,自动管理关闭
with open("test.txt", "r", encoding="utf-8") as file_obj:
content = file_obj.read()
print(content)
# 离开with代码块后,文件已经自动关闭
不同的读取方法
read方法
read方法默认会读取文件的全部内容,也可以传入参数指定读取的字符数。如果文件较大,一次性读取全部内容可能会占用过多内存,此时可以指定读取大小,分多次读取。
with open("test.txt", "r", encoding="utf-8") as f:
# 每次读取10个字符
while True:
chunk = f.read(10)
if not chunk:
break
print(chunk)
readline方法
readline方法用于读取文件的一行内容,包括行尾的换行符,如果到达文件末尾会返回空字符串。适合按行处理文件的场景,比如逐行读取日志文件。
with open("test.txt", "r", encoding="utf-8") as f:
# 读取第一行
line1 = f.readline()
print(line1)
# 读取第二行
line2 = f.readline()
print(line2)
readlines方法
readlines方法会读取文件的所有行,返回一个列表,每个元素对应文件的一行内容。适合需要一次性获取所有行并遍历处理的场景。
with open("test.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
# 遍历所有行
for line in lines:
# 去除行尾换行符再打印
print(line.strip())
open函数常用参数说明
open函数的参数除了文件路径和打开模式,还有编码参数等常用配置,以下是常见参数的说明:
| 参数 | 说明 |
|---|---|
| file | 要打开的文件路径,可以是相对路径或绝对路径 |
| mode | 打开模式,r表示只读,rb表示二进制只读,r+表示可读可写,默认是r |
| encoding | 文本文件的编码格式,读取中文文件时通常需要指定为utf-8,避免乱码 |
| errors | 编码错误处理方式,ignore表示忽略错误,strict表示遇到错误抛出异常 |
二进制文件读取
如果要读取图片、视频等二进制文件,需要将打开模式设置为rb,此时不需要指定encoding参数,读取到的内容是字节类型。
# 读取二进制图片文件
with open("test.png", "rb") as f:
binary_data = f.read()
print(type(binary_data)) # 输出<class 'bytes'>
print(len(binary_data)) # 输出图片的字节大小
注意事项
- 读取文件前要确认文件路径正确,否则会抛出FileNotFoundError异常
- 文本文件读取时如果编码不匹配会出现UnicodeDecodeError,需要根据文件实际编码调整encoding参数
- 大文件不建议使用read或readlines一次性读取全部内容,避免内存占用过高
- 优先使用with语句进行文件读取,避免忘记关闭文件导致的资源问题