跳到主要内容Python 读取 txt 文件的基础方法与进阶技巧 | 极客日志Python
Python 读取 txt 文件的基础方法与进阶技巧
Python 读取 txt 文件主要通过内置 open 函数实现,支持多种打开模式如只读、写入、追加等。常用读取方法包括一次性读取整个文件、按行读取到列表、逐行遍历文件对象以及按字符或字节读取。处理大文件时推荐使用 for 循环逐行读取以节省内存,同时需注意指定正确的编码格式避免乱码。掌握 with 语句可自动管理文件资源,结合 strip 等方法处理换行符和空格,能有效解决 FileNotFoundError 和 UnicodeDecodeError 等常见问题。
Python 读取 txt 文件是最基础的文件操作之一,核心通过内置的 open() 函数实现,配合不同的读取方法可适配小文件、大文件、按行读取、按字节读取等不同场景。本文从基础到进阶,结合实例讲解所有常用方法。
一、核心基础: 函数与文件打开模式
open()
1. open() 函数的基本参数
open(file, mode='r', encoding=None)
| 参数 | 说明 |
|---|
file | 文件路径(相对路径:相对于当前 Python 脚本的路径;绝对路径:完整路径) |
mode | 打开模式(默认 r,只读模式),常用模式见下表 |
encoding | 文件编码格式(推荐显式指定,如 utf-8、gbk,避免乱码) |
2. 常用文件打开模式
| 模式 | 作用 |
|---|
r | 只读模式(默认),文件不存在则报错 |
r+ | 读写模式,文件不存在则报错 |
rb | 二进制只读模式(用于非文本文件,如图片、视频,无需指定 encoding) |
a | 追加模式,文件不存在则创建 |
w | 写入模式,文件不存在则创建,存在则清空原有内容 |
3. 关键:使用 with 语句(推荐)
with 语句会自动关闭文件,避免因忘记调用 close() 导致的资源泄漏,是 Python 读取文件的最佳实践。
二、常用读取方法(按场景分类)
Python 读取 txt 文件 这是第 2 行内容 Hello World! 这是最后一行
场景 1:小文件 → 一次性读取整个文件(read())
适合文件体积小(几 KB~ 几十 KB),需要一次性获取所有内容的场景。
文件全部内容: Python 读取 txt 文件 这是第 2 行内容 Hello World! 这是最后一行
场景 2:中等文件 → 读取所有行到列表(readlines())
将文件的每一行作为列表的一个元素,方便后续通过索引、切片处理行数据。
with open("test.txt", "r", encoding="utf-8") as f: lines = f.readlines()
文件的行列表: ['Python 读取 txt 文件\n', '这是第 2 行内容\n', 'Hello World!\n', '这是最后一行'] 第 2 行内容: 这是第 2 行内容
场景 3:任意文件 → 逐行读取(for 循环遍历文件对象,推荐)
这是最高效、最内存友好的方式,逐行读取,不一次性加载整个文件,适合所有场景(尤其是大文件)。
with open("test.txt", "r", encoding="utf-8") as f: print("逐行读取文件:") for line in f:
逐行读取文件: Python 读取 txt 文件 这是第 2 行内容 Hello World! 这是最后一行
场景 4:精准控制 → 按字节 / 字符读取(read(n))
read(n) 可指定读取的字符数(文本模式)或字节数(二进制模式),适合需要分段读取的场景。
with open("test.txt", "r", encoding="utf-8") as f: content1 = f.read(6)
前 6 个字符:Python 后续 3 个字符:读取 t
场景 5:逐行读取(readline())
每次调用 readline() 读取一行,直到返回空字符串(文件结束),适合需要手动控制读取进度的场景。
with open("test.txt", "r", encoding="utf-8") as f: line1 = f.readline()
第一行:Python 读取 txt 文件 第二行:这是第 2 行内容
三、进阶场景处理
1. 处理大文件(GB 级)
大文件的核心是逐行读取(避免一次性加载到内存),使用 for 循环遍历文件对象即可:
2. 处理不同编码的 txt 文件
Windows 系统下的 txt 文件常使用 gbk/gb2312 编码,Linux/Mac 下多为 utf-8,若编码不匹配会报 UnicodeDecodeError,需显式指定编码:
3. 二进制模式读取(rb)
用于读取非文本文件(如图片、视频),或需要处理字节数据的场景:
with open("test.txt", "rb") as f: content = f.read()
四、常见问题与解决方法
问题 1:FileNotFoundError(文件不存在)
- 解决:检查文件路径是否正确(相对路径是否相对于当前脚本,绝对路径是否完整)。
问题 2:UnicodeDecodeError(编码错误)
- 解决:显式指定正确的编码(如
utf-8、gbk、utf-8-sig)。
问题 3:读取的内容有多余的换行符 / 空格
- 解决:使用
strip()(去除首尾空格和换行符)、rstrip("\n")(仅去除换行符)。
问题 4:文件权限不足(PermissionError)
- 解决:检查文件的读写权限,确保当前用户有读取权限。
五、总结:方法选择建议
| 场景 | 推荐方法 | 优点 |
|---|
| 小文件(<100KB) | read() 一次性读取 | 简单快捷 |
| 中等文件(100KB~1MB) | readlines() 读取到列表 | 方便后续行处理 |
| 大文件(>1MB) | for 循环遍历文件对象(逐行读取) | 内存友好、效率高 |
| 精准分段读取 | read(n) | 灵活控制读取量 |
核心原则:优先使用 with 语句,避免资源泄漏;大文件必用逐行读取,避免内存溢出。掌握这些方法,就能处理所有 txt 文件的读取需求。
微信扫一扫,关注极客日志
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具
- 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