以下是一篇超详细的Python基础文件操作指南,结合了多个优质资源整理而成,建议收藏备用:
一、文件操作基础概念
1.1 文件类型
- 文本文件:由字符序列组成(如.txt、.csv)
- 二进制文件:由字节序列组成(如图片、音频)
- 编码推荐:优先使用UTF-8编码处理文本文件
1.2 操作流程
- 打开文件 → 2. 读写操作 → 3. 关闭文件
二、文件打开与关闭
2.1 基础打开方式
# 传统方式(需手动关闭)
file = open("test.txt", "r", encoding="utf-8")
content = file.read()
file.close()
# 推荐方式:with语句(自动关闭)
with open("test.txt", "r", encoding="utf-8") as f:
content = f.read()
模式说明:
r
:只读(默认)w
:覆盖写入(文件不存在则创建)a
:追加写入+
:可读写(如r+
)b
:二进制模式(如rb
)
2.2 文件路径处理
import os
from pathlib import Path
# 获取当前路径
print(os.getcwd()) # 传统方式
print(Path.cwd()) # 面向对象方式(推荐)
# 路径拼接(跨平台兼容)
file_path = Path("data") / "logs" / "app.log"
三、文件读取操作
3.1 基础读取方法
# 一次性读取
with open("data.txt", "r") as f:
content = f.read() # 全部内容字符串
# 逐行读取(内存友好)
with open("data.txt", "r") as f:
for line in f:
print(line.strip())
# 读取为列表
lines = f.readlines() # 返回行列表
3.2 读取控制
# 读取指定字节数
chunk = f.read(1024) # 读取前1024字节
# 文件指针操作
f.seek(0) # 跳转到文件开头
pos = f.tell() # 获取当前指针位置
四、文件写入操作
4.1 基础写入方法
# 覆盖写入
with open("output.txt", "w") as f:
f.write("Hello World\n")
f.writelines(["Line1\n", "Line2\n"])
# 追加模式
with open("log.txt", "a") as f:
f.write("New log entry\n")
4.2 批量写入技巧
# 生成式写入
data = [f"Data{i}\n" for i in range(10)]
with open("dataset.txt", "w") as f:
f.writelines(data)
五、高级文件操作
5.1 文件管理
import shutil
# 文件复制
shutil.copy("src.txt", "dst.txt")
# 文件移动/重命名
shutil.move("old.txt", "new.txt")
# 目录操作
os.makedirs("new_folder", exist_ok=True)
5.2 异常处理
try:
with open("missing.txt", "r") as f:
content = f.read()
except FileNotFoundError:
print("文件不存在!")
except UnicodeDecodeError:
print("编码错误!")
六、实用技巧合集
- 大文件处理:使用生成器逐行读取
def read_large_file(file_path):
with open(file_path, "r") as f:
while chunk := f.read(1024*1024): # 每次读取1MB
yield chunk
- 内容替换:安全修改方案
import tempfile
def replace_content(file_path, old, new):
with open(file_path, "r") as fin, tempfile.NamedTemporaryFile("w", delete=False) as fout:
for line in fin:
fout.write(line.replace(old, new))
shutil.move(fout.name, file_path)
- 编码检测(需安装chardet库)
import chardet
def detect_encoding(file_path):
with open(file_path, "rb") as f:
result = chardet.detect(f.read())
return result["encoding"]
七、最佳实践建议
- 始终使用
with
语句管理文件 - 明确指定文件编码(推荐UTF-8)
- 大文件处理时采用流式读取
- 敏感操作前备份重要文件
- 优先使用
pathlib
处理路径
本文整合了Python文件操作的核心知识点,涵盖基础操作到高级技巧,建议结合代码示例进行实践练习。如需更深入的模块使用(如logging、json等),可参考相关文档。