Python3 File(文件) 方法详解
来源:网络
2025-09-20 20:59
313
在 Python 编程中,文件操作是数据处理、持久化存储的基础技能。Python 3 提供了丰富的文件操作方法,支持文本与二进制文件的读写、文件指针控制、文件对象管理等功能。本文将深入解析 Python 3 中文件操作的核心方法、使用场景及最佳实践,帮助开发者高效处理各类文件操作需求。
open() 是 Python 操作文件的核心函数,返回一个文件对象:
file = open (file_path, mode='r' , encoding=None , errors=None )
关键参数:
file_path:文件路径(绝对或相对路径)mode:打开模式(默认 'r',即只读文本模式)encoding:文件编码(如 'utf-8'、'gbk' 等,默认系统编码)errors:编码错误处理方式(如 'ignore'、'replace' 等)
常用模式:
模式 描述 适用场景 'r'只读(默认) 读取配置文件、文本数据 'w'写入(覆盖) 生成报告、保存处理后的数据 'a'追加 日志记录、增量数据存储 'rb'二进制只读 读取图片、视频等二进制文件 'wb'二进制写入(覆盖) 保存图片、备份二进制数据
文件使用完毕后需调用 close() 释放资源:
file = open ('data.txt' , 'r' )
data = file.read()
file.close()
更安全的做法:使用 with 语句 with 语句会自动管理文件的打开与关闭,避免资源泄漏:
with open ('data.txt' , 'r' ) as file:
data = file.read()
with open ('image.jpg' , 'rb' ) as f:
data = f.read(1024 )
with open ('source.jpg' , 'rb' ) as src, open ('target.jpg' , 'wb' ) as dst:
while True :
chunk = src.read(4096 )
if not chunk:
break
dst.write(chunk)
with open ('data.txt' , 'r' ) as f:
print (f.tell())
f.read(10 )
print (f.tell())
offset:偏移量(字节数)whence:参考点(0 = 文件开头,1 = 当前位置,2 = 文件末尾)示例:
with open ('data.txt' , 'r' ) as f:
f.seek(5 )
f.seek(-3 , 2 )
f.seek(0 )
with open ('data.txt' , 'r' ) as f:
print (f.closed)
print (f.closed)
with open ('data.txt' , 'r' ) as f:
print (f.readable())
print (f.writable())
with open ('output.txt' , 'w' ) as f:
print (f.readable())
print (f.writable())
将缓冲区数据立即写入磁盘(通常用于需要实时更新文件的场景):
with open ('log.txt' , 'a' ) as f:
f.write("Logging data...
" )
f.flush()
def read_large-file ( file_path ):
with open (file_path, 'r' ) as f:
for line in f:
yield line.strip()
for line in read_large-file( 'large_data.txt' ):
process(line)
自定义文件操作类,实现上下文管理协议:
class MyFileHandler :
def __init__ (self, file_path, mode ):
self.file_path = file_path
self.mode = mode
def __enter__ (self ):
self.file = open (self.file_path, self.mode)
return self.file
def __exit__ (self, exc_type, exc_val, exc_tb ):
self.file.close()
return True
with MyFileHandler('data.txt' , 'r' ) as f:
data = f.read()
问题表现 :读取文件时出现 UnicodeDecodeError解决方案 :明确指定文件编码(如 encoding='utf-8'),或使用 errors 参数处理错误with open ('data.txt' , 'r' , encoding='utf-8' , errors='ignore' ) as f:
content = f.read()
避免操作 :直接调用 read() 读取整个大文件推荐方法 :使用迭代器逐行处理,或分块读取(read(chunk_size))使用 os.path 或 pathlib 模块处理跨平台路径问题:
from pathlib import Path
file_path = Path('data' ) / 'subdir' / 'file.txt'
with open (file_path, 'r' ) as f:
data = f.read()
使用 tempfile 模块创建临时文件,自动管理生命周期:
import tempfile
with tempfile.TemporaryFile('w+b' ) as f:
f.write(b"Test data" )
f.seek(0 )
print (f.read())
方法 功能描述 返回值类型 适用场景 read(size=-1)读取指定字节数的内容 字符串(文本模式)或字节(二进制模式) 小文件读取、快速数据获取 readline()读取一行内容 字符串或字节 配置文件解析、逐行处理 readlines()读取所有行,返回列表 字符串列表或字节列表 中等大小文件的批量处理 write(string)写入字符串或字节 写入的字符数或字节数 数据持久化存储 writelines(lines)写入多行内容 无 批量写入多行数据 seek(offset, whence)移动文件指针 当前位置 随机访问文件特定位置 tell()获取当前文件指针位置 整数(字节偏移量) 记录或恢复读取位置 flush()强制刷新缓冲区到磁盘 无 实时日志记录、数据同步
通过掌握上述文件操作方法和最佳实践,开发者可以高效、安全地处理各类文件场景,从简单的配置文件读取到复杂的大数据流处理,均能应对自如