当前位置: 首页 > news >正文

python逐行读取文件内容的三种方法

你想掌握 Python 中逐行读取文件内容的三种常用方法,了解每种方法的使用方式、特点和适用场景,这是文件操作中非常基础且高频的需求。

一、方法 1:for 循环直接遍历文件对象(推荐)

这是 Python 中最简洁、最高效的逐行读取方式,无需手动管理文件指针,Python 会自动按行读取,且内存占用极低(不会一次性加载整个文件)。

代码示例

python

# 打开文件(使用with语句可自动关闭文件,避免资源泄漏) with open("test.txt", "r", encoding="utf-8") as f: # 直接遍历文件对象,逐行读取 for line_num, line in enumerate(f, 1): # enumerate从1开始计数行号 # 去除每行末尾的换行符(\n)和空格 clean_line = line.strip() print(f"第{line_num}行内容:{clean_line}")
关键说明
  • with open(...)是 Python 的上下文管理器,代码块执行完毕后会自动关闭文件,避免手动调用f.close()的遗漏;
  • 遍历文件对象时,Python 会逐行加载内容,即使文件有 GB 级大小,也不会占满内存;
  • line.strip()用于去除每行末尾的换行符\n、回车符\r和首尾空格,根据需求可选。
适用场景
  • 绝大多数常规场景(读取日志文件、配置文件、大文件等),是首选方法

二、方法 2:readline () 方法(手动逐行读取)

readline()方法会每次读取文件的一行内容,返回字符串(包含换行符),直到读取到文件末尾返回空字符串"",适合需要手动控制读取节奏的场景。

代码示例

python

# 打开文件 with open("test.txt", "r", encoding="utf-8") as f: line_num = 1 # 循环读取每行,直到返回空字符串 while True: line = f.readline() # 判断是否读取到文件末尾 if not line: break clean_line = line.strip() print(f"第{line_num}行内容:{clean_line}") line_num += 1
关键说明
  • readline()每次只读取一行,需配合while循环使用;
  • 读取到文件末尾时,readline()返回空字符串,此时终止循环;
  • 可通过f.seek(0)重置文件指针到开头,重新读取(适合需要重复读取文件的场景)。
适用场景
  • 需要手动控制读取过程(如读取几行后暂停、条件性跳过某些行);
  • 小文件、需要精准控制文件指针位置的场景。

三、方法 3:readlines () 方法(先读入列表再遍历)

readlines()会一次性将文件所有内容读取到一个列表中,列表的每个元素对应文件的一行,再通过遍历列表实现逐行读取。

代码示例

python

# 打开文件 with open("test.txt", "r", encoding="utf-8") as f: # 一次性读取所有行到列表 all_lines = f.readlines() # 遍历列表逐行处理 for line_num, line in enumerate(all_lines, 1): clean_line = line.strip() print(f"第{line_num}行内容:{clean_line}")
关键说明
  • readlines()会将整个文件加载到内存,生成一个字符串列表;
  • 优点是读取后可多次遍历列表(无需重新打开文件),缺点是读取大文件时会占用大量内存(如 1GB 文件会生成 1GB 的列表);
  • 可通过切片all_lines[0:10]快速获取指定行范围的内容。
适用场景
  • 小文件(几 MB 以内)、需要多次复用文件内容、快速定位指定行的场景;
  • 不推荐用于大文件,容易导致内存溢出。

总结

  1. for 循环遍历文件对象:最简洁、高效,内存友好,是常规场景的首选;
  2. readline () 方法:手动控制读取节奏,适合需要精准控制文件指针的场景;
  3. readlines () 方法:一次性读入列表,仅适用于小文件,可多次复用内容。

核心原则:读取大文件优先用方法 1,小文件且需复用内容用方法 3,手动控制读取流程用方法 2。

http://www.zskr.cn/news/173857.html

相关文章:

  • 基于kgateway MCP协议的智能代理通信终极解决方案
  • 计算机毕业设计|基于springboot + vue学生综合测评管理系统(源码+数据库+文档)
  • Calibre电子书格式转换终极指南:新手避坑快速上手
  • PyTorch-CUDA-v2.6镜像是否支持rsync增量同步?
  • Navicat MySQL绿色版:5分钟开启数据库管理新体验
  • 打造专属本地OCR桌面应用:完全离线的文字识别解决方案
  • 氛围编程离我们还有多远——字节跳动 AI 编程工具TRAE在真实业务需求下的功能测试与综合评估
  • 2025年物流运输时效服务企业排名:振邦物流运输稳送达时效解析 - mypinpai
  • Qwen-Image中文图像生成革命:97%文本渲染精度如何重塑创意产业?
  • 2025年终GEO优化服务商推荐:聚焦技术实力与行业深耕的5强深度解析 - 十大品牌推荐
  • AI图像生成量化技术终极指南:如何在普通硬件上实现专业级创作
  • 2025年终GEO优化服务商推荐:基于客户案例与实测数据的TOP5排名揭晓 - 十大品牌推荐
  • Nextcloud文件管理5大实用技巧:从基础操作到高级优化
  • 强化学习如何像人类一样学会“趋利避害“
  • Zonos语音合成系统深度技术指南:从架构解析到实战应用
  • 智能文档解析实战:MinerU从入门到精通的完整指南
  • 深入解析 zjkal/time-helper 库中的 ChinaHoliday 类:智能节假日判断工具
  • PyTorch-CUDA-v2.6镜像是否支持文本摘要生成?BART模型实测
  • 斯坦福四足机器人Pupper V3:开启开源机器人技术新纪元
  • 垃圾分类数据集完整解析:从入门到实战部署
  • 如何快速掌握UniTask:AsyncReactiveProperty状态管理的完整指南
  • DiffPDF V6.0.0:高效精准的PDF文档差异检测解决方案
  • Obsidian豆瓣同步指南:打造个人专属的娱乐知识库
  • 电力电子技术深度解析:三相电压型桥式逆变电路仿真实战指南
  • Scrypted 家庭监控系统:一站式智能安防解决方案
  • PingFang SC 字体深度应用:打造专业级中文网页排版体验
  • JMeter 与 Fiddler 核心区别
  • CycleGAN图像风格转换实战指南:从零开始掌握无监督图像生成技术
  • 2025年专注特定领域的法律咨询事务所推荐:高效法律咨询服务全解析 - mypinpai
  • PyTorch-CUDA-v2.6镜像是否支持实时推理?Latency低于50ms实测