API读写文件需先打开文件,指定模式(读/写/追加),操作后及时关闭释放资源,写入时注意编码,读取按需求处理
API 读写文件操作详解
文件读取操作
基本读取方法
方法名 | 描述 | 示例代码 |
---|---|---|
read() | 读取整个文件内容 | python<br>with open('file.txt', 'r') as f:<br> content = f.read()<br> |
readline() | 读取单行内容 | python<br>with open('file.txt', 'r') as f:<br> line = f.readline()<br> |
readlines() | 读取所有行到列表 | python<br>with open('file.txt', 'r') as f:<br> lines = f.readlines()<br> |
for-in 循环 | 逐行迭代读取 | python<br>with open('file.txt', 'r') as f:<br> for line in f:<br> ...<br> |
二进制文件读取
方法名 | 适用场景 | 示例代码 |
---|---|---|
read() | 读取图片/音频等二进制数据 | python<br>with open('image.png', 'rb') as f:<br> data = f.read()<br> |
read(size) | 分块读取大文件 | python<br>with open('large.bin', 'rb') as f:<br> chunk = f.read(1024)<br> |
文件写入操作
基本写入方法
方法名 | 描述 | 示例代码 |
---|---|---|
write() | 写入字符串/二进制数据 | python<br>with open('output.txt', 'w') as f:<br> f.write('Hello World')<br> |
writelines() | 写入多行数据 | python<br>with open('output.txt', 'w') as f:<br> f.writelines(['line1', 'line2'])<br> |
追加写入模式
方法名 | 特点 | 示例代码 |
---|---|---|
'a' 模式 | ,在末尾追加 | python<br>with open('log.txt', 'a') as f:<br> f.write('New Log Entry')<br> |
'a+' 模式 | 可读可追加 | python<br>with open('data.txt', 'a+') as f:<br> f.write('Appended Line')<br> |
高级文件操作
路径操作(Python)
模块/方法 | 功能 | 示例代码 |
---|---|---|
os.path | 处理文件路径 | python<br>import os<br>path = os.path.join('folder', 'file.txt')<br> |
pathlib | 面向对象的路径操作 | python<br>from pathlib import Path<br>p = Path('test.txt')<br>p.exists()<br> |
文件属性操作
方法名 | 功能 | 示例代码 |
---|---|---|
os.rename() | 重命名文件 | python<br>os.rename('old.txt', 'new.txt')<br> |
os.remove() | 删除文件 | python<br>os.remove('temp.txt')<br> |
os.stat() | 获取文件元信息 | python<br>info = os.stat('file.txt')<br>print(info.st_size)<br> |
异常处理
常见异常类型
异常类型 | 触发场景 | 处理方法 |
---|---|---|
FileNotFoundError | 文件不存在 | python<br>try:<br> open('missing.txt', 'r')<br>except FileNotFoundError:<br> print('File not found')<br> |
PermissionError | 无读写权限 | python<br>try:<br> open('/root/secret.txt', 'r')<br>except PermissionError:<br> print('Access denied')<br> |
IsADirectoryError | 尝试读取目录 | python<br>try:<br> open('/home/user/', 'r')<br>except IsADirectoryError:<br> print('Cannot read directory')<br> |
最佳实践
- 始终使用
with
语句管理文件上下文 - 捕获特定异常而非通用
Exception
- 检查文件是否存在:
os.path.exists()
- 验证文件类型:
os.path.isfile()
相关问题与解答
Q1:如何选择文件打开模式?
A:根据操作需求选择:
'r'
:只读文本文件(默认模式)'w'
:写入文本文件(清空原有内容)'a'
:追加文本文件'b'
:二进制模式(处理非文本数据)- :同时支持读写(如
'r+'
)
示例场景:
- 日志记录:
'a'
模式追加内容 - 图片处理:
'rb'
读取二进制数据 - 配置文件修改:
'r+'
读写同一文件
Q2:如何处理超大文件(如10GB)?
A:采用流式处理:
- 逐行读取:避免一次性加载到内存
with open('large_file.txt', 'r') as f: for line in f: process(line)
- 分块读取:按固定大小读取数据块
CHUNK_SIZE = 1024 * 1024 # 1MB with open('large_file.bin', 'rb') as f: while chunk := f.read(CHUNK_SIZE): process(chunk)
- 内存映射(高级用法):
import mmap with open('large_file.txt', 'r+') as f: mm = mmap.mmap(f.fileno(), 0) while line := mm.readline(): process(line)
注意事项:
- 确保及时释放资源(使用
with
语句) - 处理二进制文件时注意编码问题
- 大文件排序/统计建议使用外部工具(如Linux
sort
到此,以上就是小编对于“api 读写文件操作”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复