上一篇我们吃透了文件读取的基础——只读模式(mode='r'),知道了如何安全打开文件。但打开文件后,怎么读取内容?是一次性读完整篇,还是逐行读?不同场景该选哪种方式?
很多新手卡在这一步,分不清 read()、readline()、readlines() 的区别,要么用错场景导致内存占用过高,要么读取结果不符合预期。其实这三种方法各有侧重,掌握它们的核心差异,就能根据文件大小和需求灵活选择。
📌 先明确:三种方法的核心定位
三种方法均用于“只读模式(r)”下读取文件内容,核心区别在于「读取范围」和「返回格式」,先记住一句话定位,后续实战慢慢印证:
1. read():一次性读取文件全部内容,返回字符串;
2. readline():逐行读取,每次只读取一行,返回字符串;
3. readlines():一次性读取全部内容,按行分割,返回列表(每行为列表的一个元素)。
提前准备测试文件(test.txt),后续所有演示均基于此文件,建议大家提前创建,跟着代码实操(避免报错):
Python文件IO三种读取方法read():一次性读全部readline():逐行读readlines():读全部,按行存列表
🔍 逐个拆解:三种方法实战演示(附代码)
所有演示均使用只读模式(mode='r'),指定 encoding='utf-8',避免乱码和报错,代码可直接复制运行,重点关注“读取结果”和“用法差异”。
一、read():一次性读取全部内容(适合小型文件)
核心特点:一次性读取文件中所有内容,光标从文件开头移动到末尾;返回值是一个完整的字符串,包含文件中的换行符、空格等所有字符。
实战代码(推荐用with语句,自动关闭文件):
# read() 方法实战with open("test.txt", "r", encoding="utf-8") as file: # 一次性读取全部内容,无参数时默认读完整篇 content = file.read() print("read() 读取结果:") print(content) # 查看返回类型(字符串) print("返回类型:", type(content))
运行结果:
read() 读取结果:Python文件IO三种读取方法read():一次性读全部readline():逐行读readlines():读全部,按行存列表返回类型: <class 'str'>
补充用法:read(size) 可指定读取的字符数(size为整数),从当前光标位置开始读取,适合精准读取部分内容:
withopen("test.txt", "r", encoding="utf-8") asfile: # 读取前10个字符(中文、空格均算1个字符) content1 = file.read(10) # 从当前光标位置,再读取8个字符 content2 = file.read(8) print("第一次读取:", content1) print("第二次读取:", content2)
二、readline():逐行读取(适合大型文件)
核心特点:每次调用只读取一行内容,光标移动到下一行;返回值是字符串(包含当前行的换行符);多次调用可逐行读取完整文件,直到文件末尾返回空字符串。
实战代码(两种常用写法):
# 写法1:多次调用readline(),逐行读取with open("test.txt", "r", encoding="utf-8") as file: line1 = file.readline() # 读取第1行 line2 = file.readline() # 读取第2行 line3 = file.readline() # 读取第3行 line4 = file.readline() # 读取第4行(文件已结束,返回空字符串) print("readline() 逐行读取:") print(line1.strip()) # strip() 去除换行符 print(line2.strip()) print(line3.strip()) print(line4) # 空字符串# 写法2:循环调用,读取所有行(推荐,适配任意行数)print("\n循环读取所有行:")with open("test.txt", "r", encoding="utf-8") as file: while True: line = file.readline() if not line: # 读取到空字符串,说明文件结束 break print(line.strip())
运行结果:
readline() 逐行读取:Python文件IO三种读取方法read():一次性读全部readline():逐行读循环读取所有行:Python文件IO三种读取方法read():一次性读全部readline():逐行读readlines():读全部,按行存列表
三、readlines():读取全部,按行存列表(灵活度最高)
核心特点:一次性读取文件全部内容,自动按“换行符”分割,返回一个列表;列表中的每个元素,就是文件中的一行内容(包含换行符);可通过列表索引、循环,灵活操作每一行。
实战代码:
# readlines() 方法实战with open("test.txt", "r", encoding="utf-8") as file: lines = file.readlines() print("readlines() 读取结果(列表):") print(lines) # 查看返回类型(列表) print("返回类型:", type(lines)) # 操作列表,处理每一行(去除换行符) print("\n处理后的内容:") for line in lines: print(line.strip()) # 访问指定行(索引从0开始) print("\n第2行内容:", lines[1].strip())
运行结果:
readlines() 读取结果(列表):['Python文件IO三种读取方法\n', 'read():一次性读全部\n', 'readline():逐行读\n', 'readlines():读全部,按行存列表']返回类型: <class 'list'>处理后的内容:Python文件IO三种读取方法read():一次性读全部readline():逐行读readlines():读全部,按行存列表第2行内容: read():一次性读全部
📊 一张表分清三种方法(必存)
新手容易混淆,整理了核心差异表,一目了然,后续用的时候直接对照:
方法名 读取方式 返回类型 适用场景 核心注意点read() 一次性读全部 字符串 小型文件(几KB/MB) 大文件会占用大量内存readline() 逐行读取 字符串 大型文件(几十MB以上) 多次调用,直到返回空字符串readlines() 一次性读全部+分行 列表 任意大小文件(灵活操作)列表元素包含换行符,需处理
❌ 新手必避的3个坑(附解决方案)
三种方法用法简单,但新手很容易踩坑,每个坑都对应具体解决方案,遇到报错直接对照解决:
坑1:用read()读取大型文件,导致内存溢出 解决方案:放弃read(),改用readline()(循环逐行读)或readlines()(分列表操作),降低内存占用。
坑2:readline()读取后,光标位置错乱 解决方案:readline()每次调用后光标会移动到下一行,若需重新读取,需重新打开文件(或用seek()方法重置光标,后续讲解)。
坑3:readlines()读取后,打印出现多余空行 解决方案:列表元素包含换行符(\n),打印时用strip()方法去除,如 line.strip()。
📝 核心总结
1. 三种方法均用于只读模式(r),核心差异在「读取范围」和「返回格式」;
2. 小型文件:优先用read()(简洁)或readlines()(灵活);
3. 大型文件:优先用readline()(省内存),避免内存溢出;
4. 需灵活操作每一行:选readlines(),通过列表索引、循环处理。
其实这三种方法不用死记硬背,多实操两次就能分清——重点是根据文件大小和需求选择,比如读取几KB的配置文件,用read()最省事;读取几百MB的日志文件,用readline()最稳妥。
✨ 小任务:用今天学的三种方法,分别读取你电脑上的一个文本文档(建议准备一个10行左右的文件),对比三种方法的读取结果和操作差异,巩固用法。
读懂代码的骨架,驾驭AI的血肉,做数字时代的超级个体🔥