跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python

Python 文件操作详解:读写模式、序列化与路径管理

Python 文件操作涵盖打开关闭、读写模式、路径管理及数据序列化。文章详解 open() 函数参数、with 上下文管理器优势、文本与二进制模式区别。介绍 read/readline/readlines 及迭代读取方法,对比 StringIO 与 BytesIO 内存操作。深入讲解 CSV 处理、sys 模块重定向以及 JSON 和 pickle 序列化反序列化的应用场景与差异。补充了 pathlib 路径库使用及异常处理最佳实践,确保代码健壮性。

云间运维发布于 2025/2/7更新于 2026/10/2291 浏览
Python 文件操作详解:读写模式、序列化与路径管理

Python 文件操作详解

在 Python 编程中,文件操作是日常开发中最常用的功能之一。本文将对文件的打开、关闭、读写模式、路径处理以及数据序列化等核心知识进行系统梳理。

一、文件的打开和关闭

1. open() 函数

open() 是 Python 内置函数,底层调用操作系统接口。返回的文件对象通常称为文件句柄(如 f, fh),所有文件操作需通过该句柄的方法完成。

# 基本用法
f = open(r'd:\测试文件.txt', mode='r', encoding='utf-8')
content = f.read()
print(content)
f.close()

参数说明:

  • encoding: 指定编码格式。若不写,默认使用操作系统编码(Windows 通常为 GBK,Linux/Mac 为 UTF-8)。
  • mode: 指定访问模式,默认为 'r'(只读)。

2. with 上下文管理器

推荐使用 with open() 语句,它能自动管理资源,无需手动调用 close(),且支持同时操作多个文件。

# 优点 1:自动关闭文件
with open('文件操作的读', encoding='utf-8') as f:
    print(f.read())

# 优点 2:同时操作多个文件
with open('read.txt', encoding='utf-8') as f1, \
     open('write.txt', encoding='utf-8', mode='w') as f2:
    content = f1.read()
    f2.write(content)

3. 路径管理

  • 绝对路径:完整描述目标位置,如 C:/Users/...。
  • 相对路径:基于当前工作目录。
    • test.txt:当前文件夹。
    • ../test.txt:上一级文件夹。
    • demo/test.txt:当前文件夹下的子目录。

路径书写建议:

  • 使用正斜杠 /(推荐),跨平台兼容性好。
  • 或使用原始字符串 r'' 避免转义问题。
  • 现代 Python 开发推荐使用 pathlib 模块处理路径。
from pathlib import Path
p = Path('data/file.txt')
if p.exists():
    print(p.read_text(encoding='utf-8'))

二、常用文件访问模式

模式说明
r只读(默认),文件不存在则报错
w只写,文件不存在则创建,存在则清空
a追加写,文件不存在则创建,存在则追加内容
b二进制模式(需配合 r/w/a 使用)
+读写模式(如 r+, w+, a+)

注意:

  • 文本模式 (r) 下读取的是字符串,二进制模式 (rb) 下读取的是字节串。
  • r+ 模式下,文件指针默认在开头。若先写后读,写入内容可能覆盖原有数据。

三、文件的读取和写入

1. 读取方法

假设文件内容为多行文本:

# read():一次性读取全部
f = open('test.txt', encoding='utf-8')
print(f.read())
f.close()

# read(n):读取 n 个字符或字节
f = open('test.txt', encoding='utf-8')
print(f.read(6))  # 读取前 6 个字符
f.close()

# readline():读取一行
f = open('test.txt', encoding='utf-8')
print(f.readline().strip())
f.close()

# readlines():读取所有行为列表(大文件慎用)
f = open('test.txt', encoding='utf-8')
lines = f.readlines()
print(lines)
f.close()

# for 循环迭代(推荐,节省内存)
with open('test.txt', encoding='utf-8') as f:
    for line in f:
        print(line.strip())

2. 写入方法

  • write():写入字符串或字节。
  • w 模式会清空原文件内容。
with open('output.txt', 'w', encoding='utf-8') as f:
    f.write('Hello World\n')

3. 指针定位

  • tell():获取当前文件指针位置。
  • seek(offset, whence):移动指针。
    • whence=0:从文件头开始。
    • whence=1:从当前位置开始。
    • whence=2:从文件末尾开始。
with open('test.txt', 'rb') as f:
    f.seek(5, 0)  # 从开头跳过 5 字节
    data = f.read()

四、文件拷贝功能

实现文件拷贝时,建议使用二进制模式以兼容所有文件类型(包括图片、视频等)。

import os

def copy_file(src_path, dst_path):
    if not os.path.isfile(src_path):
        raise FileNotFoundError(f"源文件 {src_path} 不存在")
    
    try:
        with open(src_path, 'rb') as src, open(dst_path, 'wb') as dst:
            while True:
                chunk = src.read(1024 * 1024)  # 每次读取 1MB
                if not chunk:
                    break
                dst.write(chunk)
        print("拷贝成功")
    except Exception as e:
        print(f"发生错误:{e}")

五、CSV 文件的读写

CSV (Comma-Separated Values) 是以纯文本形式存储表格数据,单元格间用逗号分隔。

import csv

# 写入 CSV
with open('data.csv', 'w', newline='', encoding='utf-8-sig') as f:
    writer = csv.writer(f)
    writer.writerow(['name', 'age', 'score'])
    writer.writerows([
        ['zhangsan', 18, 98],
        ['lisi', 20, 99]
    ])

# 读取 CSV
with open('data.csv', 'r', encoding='utf-8-sig') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

*注:newline='' 可防止 Windows 下出现多余空行,utf-8-sig 支持 Excel 打开中文不乱码。

六、内存中的文件操作

Python 提供 StringIO 和 BytesIO 类,将内存缓冲区当作文件对象操作。

from io import StringIO, BytesIO

# 字符串缓冲
sio = StringIO()
sio.write('hello\n')
sio.write('world')
print(sio.getvalue())

# 字节缓冲
bio = BytesIO()
bio.write('你好'.encode('utf-8'))
print(bio.getvalue())

七、sys 模块重定向

通过修改 sys.stdin、sys.stdout、sys.stderr 可实现输入输出流的控制。

import sys

# 重定向标准输出到文件
with open('log.txt', 'w', encoding='utf-8') as f:
    old_stdout = sys.stdout
    sys.stdout = f
    print('This goes to file')
    sys.stdout = old_stdout

八、序列化和反序列化

当需要保存复杂对象(如列表、字典、自定义类实例)时,需进行序列化。

1. JSON 模块

适用于跨语言、跨平台的数据交换,仅支持基础数据类型。

import json

# 序列化
data = {'name': 'Alice', 'age': 25}
json_str = json.dumps(data, ensure_ascii=False)

# 反序列化
obj = json.loads(json_str)

# 直接读写文件
with open('data.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False, indent=4)

2. Pickle 模块

适用于 Python 内部数据持久化,支持任意 Python 对象,但不可跨语言。

import pickle

# 序列化并保存
with open('data.pkl', 'wb') as f:
    pickle.dump(data, f)

# 加载
with open('data.pkl', 'rb') as f:
    loaded_data = pickle.load(f)

3. JSON 与 Pickle 对比

  • JSON:文本格式,人类可读,跨平台,不支持自定义对象。
  • Pickle:二进制格式,不可读,仅限 Python,支持复杂对象。

九、最佳实践与注意事项

  1. 异常处理:文件操作易受 IO 错误影响,建议使用 try-except-finally 或 with 语句确保资源释放。
  2. 编码统一:尽量统一使用 UTF-8 编码,避免在不同操作系统间传输时出现乱码。
  3. 大文件处理:避免使用 readlines() 读取超大文件,应采用迭代器逐行处理。
  4. 权限检查:操作前检查文件是否存在及是否有读写权限。

通过以上方法,可以高效、安全地处理 Python 中的各类文件操作需求。

目录

  1. Python 文件操作详解
  2. 一、文件的打开和关闭
  3. 1. open() 函数
  4. 基本用法
  5. 2. with 上下文管理器
  6. 优点 1:自动关闭文件
  7. 优点 2:同时操作多个文件
  8. 3. 路径管理
  9. 二、常用文件访问模式
  10. 三、文件的读取和写入
  11. 1. 读取方法
  12. read():一次性读取全部
  13. read(n):读取 n 个字符或字节
  14. readline():读取一行
  15. readlines():读取所有行为列表(大文件慎用)
  16. for 循环迭代(推荐,节省内存)
  17. 2. 写入方法
  18. 3. 指针定位
  19. 四、文件拷贝功能
  20. 五、CSV 文件的读写
  21. 写入 CSV
  22. 读取 CSV
  23. 六、内存中的文件操作
  24. 字符串缓冲
  25. 字节缓冲
  26. 七、sys 模块重定向
  27. 重定向标准输出到文件
  28. 八、序列化和反序列化
  29. 1. JSON 模块
  30. 序列化
  31. 反序列化
  32. 直接读写文件
  33. 2. Pickle 模块
  34. 序列化并保存
  35. 加载
  36. 3. JSON 与 Pickle 对比
  37. 九、最佳实践与注意事项

更多推荐文章

查看全部
  • OKX API 实战指南:基于 python-okx 的量化交易开发
  • Vue 下拉刷新组件开发实战与 Slot 用法详解
  • 基于 Spring Boot 的生鲜农产品智慧物流调度系统设计
  • Flutter 三方库 xpath_selector 在鸿蒙系统的适配与使用指南
  • Llama 开源家族演进:从 Llama-1 到 Llama-3 技术梳理
  • 华为 Eve 多模态模型:弹性视觉专家架构与性能分析
  • Java 开发者利用 Spring AI Alibaba 构建 AI Agent
  • Java 基础(一):发展历程、技术体系与 JDK 环境搭建
  • Minecraft Forge 模组开发框架搭建指南
  • 世界职业院校技能大赛人工智能赛道解析
  • AI 小说生成器本地部署教程
  • C++ 数据结构:单调栈与单调队列总结
  • Triton 编译栈与 RISC-V 生态融合实践
  • Xray Web 漏洞扫描器实战笔记
  • React Native HarmonyOS react-native-webview 集成指南
  • 命令行大模型交互工具:MCPHost 实战指南
  • 前端 SSG:静态站点生成实战与架构选择
  • Go、Rust、Kotlin、Python 与 Java 五大主流语言性能与生态对比
  • Windows 安装 Docker 详细教程
  • MySQL ON DUPLICATE KEY UPDATE 实现存在更新不存在插入

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online