你想掌握 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 以内)、需要多次复用文件内容、快速定位指定行的场景;
- 不推荐用于大文件,容易导致内存溢出。
总结
- for 循环遍历文件对象:最简洁、高效,内存友好,是常规场景的首选;
- readline () 方法:手动控制读取节奏,适合需要精准控制文件指针的场景;
- readlines () 方法:一次性读入列表,仅适用于小文件,可多次复用内容。
核心原则:读取大文件优先用方法 1,小文件且需复用内容用方法 3,手动控制读取流程用方法 2。