Python文件读写方法详解
1. 文件基础操作
打开文件
使用open()函数,语法:open(file, mode, encoding)
常用模式:
'r':只读(默认)
'w':只写(会覆盖已有内容)
'a':追加(在文件末尾添加)
'b':二进制模式
'+':读写模式
示例:
# 打开文本文件(推荐使用with语句自动关闭)
with open('example.txt', 'r', encoding='utf-8') as file:
content = file.read() # 读取整个文件
关闭文件
显式关闭:file.close()
推荐使用with语句自动管理资源
示例:
file = open('data.txt', 'w')
file.write('Hello Python')
file.close() # 必须显式关闭
2. 文件读取方法
完整读取
read():读取整个文件内容
示例:
with open('poem.txt', 'r', encoding='utf-8') as f:
full_text = f.read()
print(full_text)
按行读取
readline():读取单行
readlines():读取所有行到列表
示例:
with open('log.txt', 'r') as f:
# 逐行读取
first_line = f.readline() # 读取第一行
remaining_lines = f.readlines() # 读取剩余所有行
高效大文件处理
使用循环逐行读取(内存高效)
示例:
with open('large_file.csv', 'r') as f:
for line in f: # 自动逐行迭代
print(line.strip()) # 去除换行符
3. 文件写入方法
基础写入
write():写入字符串
writelines():写入字符串列表
示例:
data = ["第一行\n", "第二行\n", "第三行\n"]
with open('output.txt', 'w', encoding='utf-8') as f:
f.write("文件标题\n") # 写入单行
f.writelines(data) # 写入多行列表
追加模式
使用'a'模式在文件末尾添加内容
示例:
with open('log.txt', 'a', encoding='utf-8') as f:
f.write(f"[{datetime.now()}] 新日志条目\n")
4. 文件指针操作
获取指针位置
tell()返回当前字节位置
示例:
with open('data.bin', 'rb') as f:
f.read(10)
position = f.tell() # 获取当前位置
print(f"当前指针位置: {position}")
移动指针位置
seek(offset, whence)移动指针
whence参数:
0:文件开头
1:当前位置
2:文件末尾
示例:
with open('data.txt', 'r+b') as f:
f.seek(5) # 移动到第6字节
f.write(b'insert') # 写入二进制数据
f.seek(-2, 2) # 从末尾前移2字节
print(f.read()) # 读取最后2字节
5. 二进制文件操作
二进制读写
使用'rb'或'wb'模式
示例:
# 写入二进制数据
data = bytearray([0x48, 0x65, 0x6C, 0x6C, 0x6F]) # "Hello"的字节码
with open('binary.bin', 'wb') as f:
f.write(data)
# 读取二进制数据
with open('binary.bin', 'rb') as f:
binary_data = f.read()
print(binary_data.hex()) # 输出十六进制表示
结构化二进制数据处理
使用struct模块处理二进制结构
示例:
import struct
# 写入结构化二进制数据
record = b'John Doe' + struct.pack('i', 28) # 姓名+年龄(整数)
with open('records.bin', 'wb') as f:
f.write(record)
# 读取结构化数据
with open('records.bin', 'rb') as f:
name = f.read(8).decode() # 读取前8字节作为姓名
age = struct.unpack('i', f.read(4))[0] # 读取4字节并解包为整数
print(f"Name: {name}, Age: {age}")
6. 文件系统操作
目录与文件操作
使用os和pathlib模块
示例:
import os
from pathlib import Path
# 创建目录
os.makedirs('data/backups', exist_ok=True)
# 检查文件是否存在
file_path = Path('data/info.txt')
if file_path.exists():
print("文件已存在")
else:
file_path.touch() # 创建空文件
# 获取文件信息
print(f"文件大小: {file_path.stat().st_size} 字节")
print(f"最后修改: {file_path.stat().st_mtime}")
文件路径处理
使用pathlib进行跨平台路径操作
示例:
from pathlib import Path
# 构建路径
data_dir = Path('data') / 'reports' / '2023'
data_dir.mkdir(parents=True, exist_ok=True)
# 遍历目录
for file_path in data_dir.glob('*.txt'):
print(f"找到文本文件: {file_path.name}")
# 获取绝对路径
print(f"绝对路径: {data_dir.resolve()}")
7. 异常处理
常见文件异常
处理FileNotFoundError、PermissionError等
示例:
try:
with open('protected.txt', 'r', encoding='utf-8') as f:
print(f.read())
except FileNotFoundError:
print("错误:文件不存在!")
except PermissionError:
print("错误:没有文件访问权限!")
except UnicodeDecodeError:
print("错误:文件编码不匹配!")
8. 总结
Python提供了强大而灵活的文件操作能力,通过open()函数结合不同模式可以满足各种文件处理需求。使用with语句可以自动管理资源,避免文件泄露。二进制模式支持处理非文本文件,struct模块便于解析结构化数据。结合os和pathlib模块可高效进行文件系统操作。在实际开发中,务必添加异常处理机制确保程序的健壮性。掌握这些文件操作方法是进行数据处理、日志记录、配置管理等任务的基础技能。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。







