当前位置:首页>python>《Python 从入门到精通》062|open() 详解:模式、编码、路径一次搞懂

《Python 从入门到精通》062|open() 详解:模式、编码、路径一次搞懂

  • 2026-10-11 07:45:15
《Python 从入门到精通》062|open() 详解:模式、编码、路径一次搞懂

上一章我们已经知道,文件操作最基础的流程就是三步。

打开文件 操作文件 关闭文件

其中最关键的入口,就是 open()。

很多初学者学文件时,表面上看会写:

f = open('demo.txt', 'r', encoding='utf-8')

但心里其实是模糊的。 为什么这里要写 r为什么还要写 encoding='utf-8'文件名到底写相对路径还是绝对路径 为什么别人代码能跑,我的代码却说找不到文件

这一章,就是专门把这些问题一次讲清。

一、先把 open() 看成一扇门

你可以把 open() 理解成打开一扇门。

门后面是文件。 你要先把门打开,才能进去读内容,或者往里面写内容。

最常见的写法是:

f = open('demo.txt', 'r', encoding='utf-8')

这一行代码里,其实已经包含了三个核心信息:

第一个,打开哪个文件 第二个,用什么方式打开 第三个,用什么编码处理内容

所以你可以先把它读成一句人话:

打开 demo.txt 这个文件 按读取模式打开 并且用 utf-8 编码去解析它

只要你能把这句话读顺,open() 就不再神秘了。

二、open() 最核心的几个参数

先看最常见的结构:

open(文件路径, 打开模式, encoding=编码方式)

最重要的就是这三项。

文件路径 模式 编码

你现在先不用追求记住所有参数,只要先把这三样吃透,日常开发里已经够用了。

三、模式到底是什么

模式,决定了你打开文件以后,到底想干什么。

最常见的模式有四个:

r 读取w 写入a 追加x 独占创建

这四个里,初学阶段最常用的是前三个。

我们一个一个讲。

四、r 模式:读取文件

r 是 read 的意思,也就是读取。

f = open('demo.txt', 'r', encoding='utf-8')content = f.read()print(content)f.close()

这种模式适合什么场景?

你已经有一个文件 你只想看里面的内容 不打算修改它

比如:

读取日志 读取配置 读取一篇文章 读取一份名单

要注意一点,r 模式有个前提:文件必须真实存在。

如果文件不存在,就会直接报错。

比如你写:

f = open('abc.txt', 'r', encoding='utf-8')

但当前目录根本没有这个文件,程序就会报 FileNotFoundError。

这个错很常见,而且一点都不可怕。它只是告诉你,程序找不到你说的那个文件。

五、w 模式:写入文件

w 是 write 的意思,也就是写入。

f = open('note.txt', 'w', encoding='utf-8')f.write('开始学习 open 的用法')f.close()

执行完以后,会发生两件事之一。

如果 note.txt 原本不存在,Python 会帮你创建它。 如果 note.txt 原本已经存在,Python 会先清空原内容,再写入新的内容。

这个特点非常重要。

很多新手第一次用 w,会以为是往原文件后面补内容。其实不是。w 的行为更像是重写一份。

你可以把它理解成:

旧内容不要了 从头开始写新的

所以只要你使用 w,就要有覆盖旧内容的心理准备。

六、a 模式:追加内容

a 是 append 的意思,也就是追加。

f = open('log.txt', 'a', encoding='utf-8')f.write('新增一条记录\n')f.close()

它和 w 最大的区别就是:

w 会覆盖原内容a 会保留原内容,并且把新内容加到最后

这在很多场景里非常实用。

比如:

写运行日志 记录用户操作 持续保存采集结果 每天往同一个文件里补数据

如果文件原本不存在,a 模式也会自动创建。

所以你可以这样记:

想重新写一份,用 w想接着往后写,用 a

七、x 模式:文件必须不存在

x 相对没那么常用,但也值得认识一下。

f = open('new.txt', 'x', encoding='utf-8')f.write('这是新建文件')f.close()

它的特点是:

文件不存在时,创建并写入 文件已经存在时,直接报错

也就是说,x 比较适合那种你不希望误覆盖旧文件的场景。

不过对初学者来说,先把 r、w、a 用熟更重要。

八、三种常用模式,放在一起对比最容易记

你可以用下面这个表意去理解它们。

r只读 文件必须存在

w重写 文件不存在会创建 文件存在会清空

a追加 文件不存在会创建 文件存在就在末尾继续写

真正学会文件模式,不是死记字母,而是知道每种模式背后的行为。

九、为什么很多代码里都写 encoding='utf-8'

这是初学者第二个高频疑问。

直接说结论:处理文本文件时,尽量养成写 encoding='utf-8' 的习惯。

原因很简单。电脑保存文字时,不是按“汉字长什么样”直接存进去的,而是按编码规则转成字节保存。

你可以把编码理解成一种翻译规则。

程序写文件时,要把文字翻译成字节。 程序读文件时,要把字节再翻译回文字。

如果写入和读取使用的规则不一致,就容易乱码,甚至报错。

比如下面这句:

f = open('test.txt', 'w', encoding='utf-8')f.write('你好,Python')f.close()

这里的意思就是: 把这段中文按照 utf-8 规则写进文件。

后面读取时,也最好继续使用 utf-8:

f = open('test.txt', 'r', encoding='utf-8')print(f.read())f.close()

这样最稳妥。

十、utf-8 为什么这么常见

因为 utf-8 兼容性很好,能处理中文,也能处理英文,是现在非常通用的一种编码方式。

你现在不需要钻进编码底层细节里,只要先建立一个实际开发习惯:

读写中文文本文件时,优先写上 encoding='utf-8'。

这能帮你避开大量乱码问题。

十一、路径到底是什么

如果说模式决定你要做什么,编码决定你怎么看文字,那么路径决定的就是:

你到底要操作哪一个文件。

比如:

open('demo.txt', 'r', encoding='utf-8')

这里的 'demo.txt' 就是路径。

它表示当前程序要找一个叫 demo.txt 的文件。

但问题来了。电脑里同名文件可能很多个,Python 怎么知道你说的是哪一个?

答案就是:靠路径定位。

路径本质上就是文件地址。

十二、相对路径和绝对路径

这是最容易混淆的地方之一。

先说相对路径。

open('demo.txt', 'r', encoding='utf-8')

这种写法就是相对路径。 它的意思不是这个文件在电脑上的完整位置,而是相对于当前程序运行的位置去找。

你也可以写成:

open('data/demo.txt', 'r', encoding='utf-8')

这表示去当前目录下的 data 文件夹里找 demo.txt。

相对路径的优点是简洁,项目搬家时也更灵活。 所以写项目时,经常会用相对路径。

再说绝对路径。

比如 Windows 里可能长这样:

open('D:/python_project/data/demo.txt', 'r', encoding='utf-8')

这就是完整地址,直接告诉 Python 文件在硬盘上的哪个位置。

绝对路径的优点是明确。 缺点是不够灵活,换一台电脑、换一个文件夹,路径可能就失效了。

十三、初学者为什么总是找不到文件

因为很多人以为,文件路径是相对于代码文件所在位置。 其实不一定。

Python 查找相对路径时,更关键的是:当前运行目录在哪里。

这句话初学时会有点绕。你先这样理解:

你双击运行、终端运行、IDE 运行,程序的工作目录可能不一样。 所以同样一句 open('demo.txt'),有时能找到文件,有时找不到。

如果你明明创建了文件,却还是报找不到文件,优先检查这几个问题:

文件名有没有写错 后缀名有没有写错 文件是不是和程序在同一个运行目录 是不是放进了别的文件夹 路径里的斜杠有没有问题

很多时候,不是 Python 有问题,而是路径没写对。

十四、路径里的斜杠为什么也会出问题

尤其是 Windows 用户,经常在这里踩坑。

你可能会这样写:

open('D:\new\test.txt', 'r', encoding='utf-8')

看起来没毛病,但实际上这里可能有问题。因为反斜杠在字符串里有时会被当作转义符处理。

比如 \n 是换行,\t 是制表符。

所以路径里如果恰好碰到这些组合,就可能出错。

更稳妥的写法有三种。

第一种,使用正斜杠:

open('D:/new/test.txt', 'r', encoding='utf-8')

第二种,使用双反斜杠:

open('D:\\new\\test.txt', 'r', encoding='utf-8')

第三种,使用原始字符串:

open(r'D:\new\test.txt', 'r', encoding='utf-8')

初学阶段,你记住一个最省事的方法就行:路径里尽量用正斜杠。

这样最不容易踩坑。

十五、一个例子,把模式、编码、路径一起看懂

假设你要在当前目录下创建一个 study.txt 文件,并写入两行内容。

f = open('study.txt', 'w', encoding='utf-8')f.write('第一天:学会 open\n')f.write('第二天:学会路径和编码\n')f.close()

这里三部分分别表示什么?

study.txt表示文件路径,这里是相对路径

w表示写入模式,会新建文件或覆盖原文件

encoding='utf-8'表示按 utf-8 编码写入文本

再把它读出来:

f = open('study.txt', 'r', encoding='utf-8')content = f.read()print(content)f.close()

这时:

路径还是 study.txt模式变成了 r编码仍然用 utf-8

如果这套思路你能说清楚,说明你已经真正理解 open() 了。

十六、初学者最常见的几个误区

第一个误区,只记语法,不理解行为。 比如知道 w 是写入,但不知道它会覆盖旧内容。

第二个误区,觉得编码是可有可无。 结果一处理中文文件,就开始乱码。

第三个误区,分不清相对路径和绝对路径。 文件明明存在,却总是打不开。

第四个误区,把路径字符串写错。 尤其是 Windows 路径里,反斜杠最容易埋坑。

这些都不是大问题。文件操作本来就是一个很容易在细节上翻车的知识点。关键不是一次全记住,而是每次遇到问题都能对照排查。

十七、一个小实验,感受 w 和 a 的区别

先运行这段代码:

f = open('demo.txt', 'w', encoding='utf-8')f.write('第一行内容\n')f.close()

再运行:

f = open('demo.txt', 'w', encoding='utf-8')f.write('第二次写入\n')f.close()

你会发现,文件里只剩:

第二次写入

因为第二次 w 把第一次内容覆盖掉了。

接着改成下面这样:

f = open('demo.txt', 'a', encoding='utf-8')f.write('第三次追加\n')f.close()

这时文件内容就会变成:

第二次写入第三次追加

这个实验非常值得你自己跑一遍。 很多概念只看文字不深,自己运行一下立刻就明白了。

十八、本章你最该掌握的,不是背参数,而是形成判断力

以后你只要看到一行代码:

open('xxx', '某种模式', encoding='utf-8')

你脑子里要马上能跳出三个判断。

它在操作哪个文件 它是要读、重写还是追加 它是按什么编码处理文本

一旦这三个点看清,文件操作的大半问题你都能自己判断。

十九、本章小练习

练习 1 创建一个 note.txt 文件,写入一句话: 今天我学会了 open 的模式和编码

练习 2 再用追加模式补一行: 接下来我要继续学 with 语句

练习 3 把整个文件读出来并打印

参考代码:

f = open('note.txt', 'w', encoding='utf-8')f.write('今天我学会了 open 的模式和编码\n')f.close()f = open('note.txt', 'a', encoding='utf-8')f.write('接下来我要继续学 with 语句\n')f.close()f = open('note.txt', 'r', encoding='utf-8')print(f.read())f.close()

你把这段代码自己完整敲一遍,本章内容就算真正落地了。

二十、本章总结

这一章你要拿下三件事。

第一,理解 open() 的本质 它就是打开文件的入口

第二,掌握三种高频模式r 用来读w 用来重写a 用来追加

第三,建立两个好习惯 处理文本优先写 encoding='utf-8'路径问题优先检查文件位置和写法

只要这三点过关,后面学 with、学文本读写、学 CSV、学异常处理,都会顺很多。

下一章我们继续讲一个非常重要的写法:with 语句为什么这么重要:资源管理的优雅写法。

最新文章

随机文章