上一篇我们掌握了 open() 函数的基础用法——打开文件,建立Python与文件的连接。今天我们聚焦其中最常用、最基础的打开模式:只读模式(mode='r'),也是文件读取的核心,全程不涉及复杂读写,只讲透“只读”的本质、用法和避坑点。
只读模式,顾名思义,就是“只能读取文件内容,不能修改、不能写入、不能删除”,是文件操作中最安全的模式(避免误操作修改文件内容),也是日常开发中最常用的模式之一,尤其适合查看文件内容、读取配置文件等场景。
📌 先明确:只读模式 r 的核心定义
当 open() 函数的 mode='r' 时,就是只读模式,核心规则如下:
1. 只能读取文件内容,无法执行任何修改操作(包括写入、删除、覆盖文件内容);
2. 打开的文件必须存在,若文件不存在,直接报错 FileNotFoundError(区别于其他模式的“自动创建文件”);
3. 读取文件时,光标默认从文件开头开始,后续读取会从当前光标位置继续。
补充:mode='r' 是 open() 函数的默认模式,也就是说,不写mode 参数时,默认就是只读模式,二者完全等价:open("test.txt") ≡ open("test.txt", mode='r')。
🔍 必掌握:只读模式 r 的基础语法
结合上一篇的 open() 函数语法,只读模式的完整写法(重点关注 mode 和 encoding):
# 只读模式的3种常见写法(等价)# 写法1:默认mode='r',不写mode参数(推荐,简洁)open("test.txt", encoding="utf-8")# 写法2:明确指定mode='r'(规范,易读)open("test.txt", mode='r', encoding="utf-8")# 写法3:简写(mode可省略不写,默认r)open("test.txt", encoding="utf-8")
核心注意点:只读模式下,必须指定正确的 encoding 编码(优先 utf-8,Windows 系统可尝试 gbk),否则会出现乱码或编码报错,这是新手最容易忽略的点。
💻 实战演示:只读模式 r 的3个核心场景
假设我们有一个 test.txt 文件,内容如下(提前创建好,避免报错):
Python文件IO入门只读模式 r 详解新手必看,避坑指南
演示1:基础读取(读取整个文件内容)
用只读模式打开文件,读取全部内容,适合小型文本文件(代码可直接复制运行):
# 1. 打开文件(只读模式,指定utf-8编码)file = open("test.txt", mode='r', encoding="utf-8")# 2. 读取整个文件内容(read()方法)content = file.read()# 3. 打印读取到的内容print("读取到的文件内容:")print(content)# 4. 关闭文件(必须操作,释放资源)file.close()运行结果:读取到的文件内容:Python文件IO入门只读模式 r 详解新手必看,避坑指南
解读:read() 方法会读取文件中所有内容,光标从开头移动到文件末尾,读取完成后,再次调用 read() 会返回空字符串(光标已在末尾)。
演示2:逐行读取(适合大型文件)
如果文件过大(比如几MB、几十MB),用 read() 会一次性读取全部内容,占用大量内存,此时用逐行读取更高效:
# 逐行读取大型文件(推荐写法)with open("test.txt", 'r', encoding="utf-8") as file: # 循环读取每一行,直到文件末尾 for line in file: # 去除每行末尾的换行符(strip()),避免多余空行 print(line.strip())
运行结果与演示1一致,但内存占用极低,适合处理大型文本文件;同时 with 语句会自动关闭文件,无需手动写 close(),更简洁安全。
演示3:读取指定长度内容
除了读取全部、逐行读取,还可以指定读取的字符数(适合精准读取部分内容):
withopen("test.txt", 'r', encoding="utf-8") asfile: # 读取前10个字符(包含中文、空格,中文算1个字符) content1 = file.read(10) # 从当前光标位置,再读取5个字符 content2 = file.read(5) print("第一次读取:", content1) print("第二次读取:", content2)运行结果:第一次读取: Python文件IO入第二次读取: 门
❌ 新手必避的3个坑(附解决方案)
只读模式看似简单,但新手很容易踩坑,每一个坑都附具体解决方案,遇到报错直接对照解决:
坑1:文件不存在,报错 FileNotFoundError解决方案:先检查文件路径(相对绝对路径),确认文件存在后再打开;若文件确实不存在,可先创建文件(后续讲写入模式时会讲)。
坑2:编码不匹配,报错 UnicodeDecodeError解决方案:优先指定 encoding="utf-8",若报错,更换为 encoding="gbk"(适配Windows系统默认编码)。
坑3:只读模式下尝试写入,报错 io.UnsupportedOperation示例:file.write("test")(只读模式下执行) 解决方案:放弃写入操作,或更换为可写入模式(如 'w'、'a',后续文章讲解),只读模式仅用于读取。
📝 核心总结
1. 只读模式 mode='r':只能读、不能改,是最安全的文件打开模式;
2. 核心用法:搭配 read()(读全部)、for line in file(逐行读),按需选择;
3. 避坑关键:文件必须存在、编码必须匹配,不尝试写入操作。
✨ 小任务:用只读模式,读取你电脑上的一个文本文档,分别用 read() 和逐行读取两种方式,练习读取操作,感受两种方式的区别。
读懂代码的骨架,驾驭AI的血肉,做数字时代的超级个体🔥