news 2026/2/7 13:32:56

Python 读取 txt 文件的全攻略

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 读取 txt 文件的全攻略

Python 读取 txt 文件是最基础的文件操作之一,核心通过内置的open()函数实现,配合不同的读取方法可适配小文件、大文件、按行读取、按字节读取等不同场景。本文从基础到进阶,结合实例讲解所有常用方法。

一、核心基础:open()函数与文件打开模式

1.open()函数的基本参数

python

open(file, mode='r', encoding=None)
参数说明
file文件路径(相对路径:相对于当前 Python 脚本的路径;绝对路径:完整路径)
mode打开模式(默认r,只读模式),常用模式见下表
encoding文件编码格式(推荐显式指定,如utf-8gbk,避免乱码)

2. 常用文件打开模式

模式作用
r只读模式(默认),文件不存在则报错
r+读写模式,文件不存在则报错
rb二进制只读模式(用于非文本文件,如图片、视频,无需指定 encoding)
a追加模式,文件不存在则创建
w写入模式,文件不存在则创建,存在则清空原有内容

3. 关键:使用with语句(推荐)

with语句会自动关闭文件,避免因忘记调用close()导致的资源泄漏,是 Python 读取文件的最佳实践。

python

# 基本结构 with open("test.txt", "r", encoding="utf-8") as f: # 读取文件的操作 content = f.read()

二、常用读取方法(按场景分类)

先准备一个测试文件test.txt,内容如下:

plaintext

Python读取txt文件 这是第2行内容 Hello World! 这是最后一行

场景 1:小文件 → 一次性读取整个文件(read()

适合文件体积小(几 KB~ 几十 KB),需要一次性获取所有内容的场景。

python

# 读取整个文件 with open("test.txt", "r", encoding="utf-8") as f: content = f.read() # 返回字符串,包含所有内容(包括换行符\n) print("文件全部内容:") print(content)

输出结果

plaintext

文件全部内容: Python读取txt文件 这是第2行内容 Hello World! 这是最后一行

场景 2:中等文件 → 读取所有行到列表(readlines()

将文件的每一行作为列表的一个元素,方便后续通过索引、切片处理行数据。

python

with open("test.txt", "r", encoding="utf-8") as f: lines = f.readlines() # 返回列表,每个元素是一行内容(包含换行符\n) print("文件的行列表:", lines) print("第2行内容:", lines[1].strip()) # strip()去掉换行符和首尾空格

输出结果

plaintext

文件的行列表: ['Python读取txt文件\n', '这是第2行内容\n', 'Hello World!\n', '这是最后一行'] 第2行内容: 这是第2行内容

场景 3:任意文件 → 逐行读取(for循环遍历文件对象,推荐)

这是最高效、最内存友好的方式,逐行读取,不一次性加载整个文件,适合所有场景(尤其是大文件)。

python

with open("test.txt", "r", encoding="utf-8") as f: print("逐行读取文件:") for line in f: # 直接遍历文件对象,每次返回一行 print(line.strip()) # strip()去除换行符和多余空格

输出结果

plaintext

逐行读取文件: Python读取txt文件 这是第2行内容 Hello World! 这是最后一行

场景 4:精准控制 → 按字节 / 字符读取(read(n)

read(n)可指定读取的字符数(文本模式)或字节数(二进制模式),适合需要分段读取的场景。

python

with open("test.txt", "r", encoding="utf-8") as f: content1 = f.read(6) # 读取前6个字符 print("前6个字符:", content1) content2 = f.read(3) # 从当前位置继续读取3个字符 print("后续3个字符:", content2)

输出结果

plaintext

前6个字符:Python 后续3个字符:读取t

场景 5:逐行读取(readline()

每次调用readline()读取一行,直到返回空字符串(文件结束),适合需要手动控制读取进度的场景。

python

with open("test.txt", "r", encoding="utf-8") as f: line1 = f.readline() # 读取第一行 line2 = f.readline() # 读取第二行 print("第一行:", line1.strip()) print("第二行:", line2.strip())

输出结果

plaintext

第一行:Python读取txt文件 第二行:这是第2行内容

三、进阶场景处理

1. 处理大文件(GB 级)

大文件的核心是逐行读取(避免一次性加载到内存),使用for循环遍历文件对象即可:

python

# 读取GB级大文件,逐行处理 with open("big_file.txt", "r", encoding="utf-8") as f: for line in f: # 处理每一行(如统计行数、提取关键信息) pass

2. 处理不同编码的 txt 文件

Windows 系统下的 txt 文件常使用gbk/gb2312编码,Linux/Mac 下多为utf-8,若编码不匹配会报UnicodeDecodeError,需显式指定编码:

python

# 读取GBK编码的文件 with open("gbk_file.txt", "r", encoding="gbk") as f: content = f.read() print(content) # 读取带BOM的UTF-8文件(Windows记事本保存的UTF-8文件常带BOM) with open("utf8_bom_file.txt", "r", encoding="utf-8-sig") as f: content = f.read() print(content)

3. 二进制模式读取(rb

用于读取非文本文件(如图片、视频),或需要处理字节数据的场景:

python

with open("test.txt", "rb") as f: content = f.read() # 返回字节串(bytes) print("二进制内容:", content) # 转换为字符串(需指定编码) print("转换为字符串:", content.decode("utf-8"))

四、常见问题与解决方法

问题 1:FileNotFoundError(文件不存在)

  • 解决:检查文件路径是否正确(相对路径是否相对于当前脚本,绝对路径是否完整)。

问题 2:UnicodeDecodeError(编码错误)

  • 解决:显式指定正确的编码(如utf-8gbkutf-8-sig)。

问题 3:读取的内容有多余的换行符 / 空格

  • 解决:使用strip()(去除首尾空格和换行符)、rstrip("\n")(仅去除换行符)。

问题 4:文件权限不足(PermissionError

  • 解决:检查文件的读写权限,确保当前用户有读取权限。

五、总结:方法选择建议

场景推荐方法优点
小文件(<100KB)read()一次性读取简单快捷
中等文件(100KB~1MB)readlines()读取到列表方便后续行处理
大文件(>1MB)for循环遍历文件对象(逐行读取)内存友好、效率高
精准分段读取read(n)灵活控制读取量

核心原则:优先使用with语句,避免资源泄漏;大文件必用逐行读取,避免内存溢出。掌握这些方法,就能处理所有 txt 文件的读取需求。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/5 13:12:08

Open-AutoGLM怎么部署在自己电脑上:5步实现本地大模型自由运行

第一章&#xff1a;Open-AutoGLM本地部署概述Open-AutoGLM 是一个开源的自动化代码生成与推理框架&#xff0c;基于 GLM 架构构建&#xff0c;支持自然语言到代码的转换、智能补全及多语言项目分析。本地部署该系统可保障数据隐私、提升响应效率&#xff0c;并允许深度定制模型…

作者头像 李华
网站建设 2026/2/5 16:38:00

职业发展规划:基于行业趋势的个性化成长路径建议

职业发展规划&#xff1a;基于行业趋势的个性化成长路径建议 在今天这个信息爆炸的时代&#xff0c;每个人都在面对一个共同的困境&#xff1a;知识越来越多&#xff0c;但真正能被“用起来”的却越来越少。尤其是职场人&#xff0c;手头积累了大量学习笔记、项目文档、行业报告…

作者头像 李华
网站建设 2026/2/5 19:37:16

深入理解Java注解(从零开始手把手教你自定义与使用Java注解)

在Java开发中&#xff0c;Java注解&#xff08;Annotation&#xff09;是一种强大的元数据工具&#xff0c;它允许开发者在代码中添加额外的信息&#xff0c;而不会直接影响程序逻辑。无论是Spring框架中的Autowired&#xff0c;还是JPA中的Entity&#xff0c;都离不开注解的支…

作者头像 李华
网站建设 2026/2/5 23:46:22

Open-AutoGLM架构分析(20年专家亲授,9大核心模块全解析)

第一章&#xff1a;Open-AutoGLM沉思 架构分析核心设计理念 Open-AutoGLM 采用模块化与解耦设计&#xff0c;旨在实现自动化生成语言模型推理流程的灵活编排。其核心思想是将任务分解为可复用的认知单元&#xff08;Cognitive Units&#xff09;&#xff0c;通过动态调度机制组…

作者头像 李华
网站建设 2026/2/7 6:44:48

Kibana的Discover页面搜索

要在Kibana中只过滤出包含Updated的日志信息&#xff0c;直接在搜索框中使用关键词匹配即可&#xff0c;操作非常简单&#xff1a; 步骤1&#xff1a;在Kibana的Discover页面搜索框输入过滤条件 在当前页面的搜索框&#xff08;通常在页面顶部&#xff09;中输入&#xff1a; m…

作者头像 李华
网站建设 2026/2/4 5:21:32

Open-AutoGLM沉思版究竟有多强:5大核心能力重塑企业智能化未来

第一章&#xff1a;Open-AutoGLM沉思版究竟有多强&#xff1a;重新定义企业智能化边界Open-AutoGLM沉思版作为新一代开源大语言模型框架&#xff0c;凭借其强大的语义理解、任务自动分解与多智能体协同能力&#xff0c;正在重塑企业级AI应用的技术边界。它不仅支持复杂业务流程…

作者头像 李华