当前位置:首页>python>《Python 从入门到精通》064|读文本文件、写文本文件、追加内容完整演示

《Python 从入门到精通》064|读文本文件、写文本文件、追加内容完整演示

  • 2026-10-11 07:44:23
《Python 从入门到精通》064|读文本文件、写文本文件、追加内容完整演示

前面几章,我们已经把文件操作最核心的几个基础点打下来了。

你已经知道什么是文件读写 知道 open() 是入口 知道 r、w、a 这几种常见模式 也知道了为什么正式代码更推荐用 with

但很多人学到这里,脑子里还是散的。 知识点看着都懂,一到自己写代码,就容易乱。

比如:

什么时候该用 read()什么时候该用 write()什么时候用追加 为什么有时候文件内容被覆盖了 为什么有时候写完再读,结果和自己想得不一样

所以这一章,我们不再零碎地讲单个知识点,而是把读文本文件、写文本文件、追加内容这三件最常用的事,放在一起完整演示。你真正把这一章吃透,文件操作就算正式入门了。

一、先把三个动作分清楚

虽然都叫文件操作,但读、写、追加,其实是三种完全不同的行为。

读文件,重点是把外部内容拿进程序里。 写文件,重点是把程序里的内容保存出去。 追加文件,重点是在保留原内容的前提下,继续往后补内容。

这三件事如果混在一起学,很容易出错。 但只要你脑子里先分开,代码就会清楚很多。

你可以这样记:

读取,是拿进来。 写入,是重新放进去。 追加,是接着往后放。

二、先看最简单的读取文本文件

假设当前目录下有一个 note.txt 文件,内容如下:

今天学习 Python明天继续练习文件操作

现在我们把它读出来。

with open('note.txt', 'r', encoding='utf-8') as f:    content = f.read()print(content)

输出结果:

今天学习 Python明天继续练习文件操作

这里最关键的点有两个。

第一,模式是 r表示这是读取文件

第二,f.read() 会一次性把整个文件内容全部读出来 返回值通常是一个字符串

也就是说,文件里的多行文字,进到程序以后,本质上就是一个字符串变量。 一旦成了字符串,你后面就能继续做切片、查找、替换、分割等操作。

这一步你一定要真正理解。 因为文件读取的目的,不是为了把内容打印一下就完了,而是为了把数据拿进程序继续处理。

三、读取之后,内容其实已经变成普通变量了

很多初学者有一个模糊点:

读完文件以后,内容到底在哪里

答案是,在变量里。

比如刚才这段代码:

with open('note.txt', 'r', encoding='utf-8') as f:    content = f.read()print(type(content))print(content)

这里的 content 就已经是一个字符串变量了。

你甚至可以这样做:

with open('note.txt', 'r', encoding='utf-8') as f:    content = f.read()new_content = content.replace('Python', 'Python 语言')print(new_content)

这说明什么?

说明文件只是数据的来源。 真正进入程序以后,你处理的其实是变量,不是文件本身。

把这一层想通,后面你就不会总把文件和字符串混在一起了。

四、再看写文本文件

现在我们换个场景。 假设你想创建一个学习记录文件,把今天的学习内容写进去。

with open('study_log.txt', 'w', encoding='utf-8') as f:    f.write('今天学了文件读写\n')    f.write('已经会使用 with 语句\n')

执行后,会生成一个 study_log.txt 文件,内容大概是这样:

今天学了文件读写已经会使用 with 语句

这里要注意三件事。

第一,模式是 w表示写入模式

第二,write() 是把字符串写进文件 所以你传进去的通常就是字符串

第三,w 的行为是重写 如果文件原本不存在,就创建 如果文件原本存在,就清空旧内容再写新内容

这一点很重要。 因为很多人第一次写文件时,误以为自己是在往后补内容,结果一运行,把原来的内容全覆盖了。

五、为什么写文件时经常要自己加换行

看下面这段代码:

with open('demo.txt', 'w', encoding='utf-8') as f:    f.write('第一行')    f.write('第二行')

你可能以为结果会分成两行。 其实不会。

文件内容会变成:

第一行第二行

因为 write() 只负责原样写入,它不会自动帮你换行。

如果你想让内容分行,就要自己加 \n。

with open('demo.txt', 'w', encoding='utf-8') as f:    f.write('第一行\n')    f.write('第二行\n')

这时候文件内容才会是:

第一行第二行

所以写文本文件时,你要始终记住一点:

换行不是自动发生的,而是你自己控制的。

这个细节很小,但几乎所有初学者都会在这里踩一次坑。

六、追加内容到底和写入有什么不同

现在来看第三个动作,追加。

假设你已经有一个 study_log.txt 文件,内容是:

今天学了文件读写已经会使用 with 语句

这时候你又想补一条新的学习记录。 如果你还用 w,原内容就会被覆盖。 所以这里应该用 a。

with open('study_log.txt', 'a', encoding='utf-8') as f:    f.write('下一步准备学习 CSV 文件\n')

执行后,文件会变成:

今天学了文件读写已经会使用 with 语句下一步准备学习 CSV 文件

这就是追加模式的意义。

它不会破坏原内容。 它只是在原文件末尾,继续往后写。

你可以把 w 和 a 的区别再记一遍:

w 是重写a 是续写

只要这个区别不混,文件写入就不会乱。

七、把读、写、追加放在一起看,一下就清楚了

现在我们把三个动作放在一套完整流程里。

第一步,先创建一个文件并写入初始内容。

with open('record.txt', 'w', encoding='utf-8') as f:    f.write('第一天:学会读文件\n')    f.write('第二天:学会写文件\n')

第二步,再追加一条内容。

with open('record.txt', 'a', encoding='utf-8') as f:    f.write('第三天:学会追加文件内容\n')

第三步,最后把整个文件读出来看看。

with open('record.txt', 'r', encoding='utf-8') as f:    content = f.read()print(content)

输出结果:

第一天:学会读文件第二天:学会写文件第三天:学会追加文件内容

这一套代码非常值得你亲手敲一遍。 因为它把文件操作最核心的三种日常场景,一次性串起来了。

八、你要学会从程序视角理解这三件事

站在程序的角度看:

读文件,是把外部数据读进内存。 写文件,是把内存里的数据落到硬盘。 追加文件,是在已有硬盘数据后面继续补充内容。

这一层理解,比死记语法更重要。

很多人学代码喜欢背:

r 读w 写a 追加

这当然没错,但不够深。 真正有用的是,你一看到需求,就能知道自己该选哪种模式。

比如:

想查看文章内容,用 r想重新生成报表,用 w想每天往日志里补记录,用 a

只要这种判断力建立起来,文件操作就不会只是机械套语法。

九、一个特别常见的错误:以为写完立刻就会自动换结构

比如有人写:

with open('data.txt', 'w', encoding='utf-8') as f:    f.write('姓名:张三')    f.write('年龄:18')    f.write('城市:北京')

然后看到结果:

姓名:张三年龄:18城市:北京

就以为 Python 出问题了。

其实不是。 原因很简单,你写进去的就是连续字符串,程序只是在老老实实照做。

正确写法应该是自己把格式设计好,比如:

with open('data.txt', 'w', encoding='utf-8') as f:    f.write('姓名:张三\n')    f.write('年龄:18\n')    f.write('城市:北京\n')

或者:

with open('data.txt', 'w', encoding='utf-8') as f:    text = '姓名:张三\n年龄:18\n城市:北京\n'    f.write(text)

这也提醒你一个很重要的思路:

文件不会替你组织内容结构,结构要靠你自己设计。

十、再做一个更贴近实际的小案例

假设你想做一个最简单的学习打卡记录器。 每天运行程序,就往文件里追加一条学习记录。 最后再把所有记录读出来。

代码如下:

today_record = '2026-03-26 学习了 Python 文件操作\n'with open('checkin.txt', 'a', encoding='utf-8') as f:    f.write(today_record)with open('checkin.txt', 'r', encoding='utf-8') as f:    all_records = f.read()print(all_records)

这个例子虽然简单,但已经很接近真实使用场景了。

因为现实里的很多程序,本质上都是这样工作的:

先保存数据 再读取数据 再展示或处理数据

比如日志系统、配置文件、缓存文件、学习记录、导出结果,本质上都离不开这些基本动作。

十一、读取和打印,不是一回事

这一点很多初学者容易混。

看代码:

with open('note.txt', 'r', encoding='utf-8') as f:    content = f.read()

这里做的是读取。 只是把文件内容拿到变量 content 里。

而下面这句:

print(content)

做的是打印。 是把变量的值显示到屏幕上。

也就是说:

读取,是数据进入程序。 打印,是数据展示给你看。

这两个动作经常连在一起出现,所以新手容易把它们看成一件事。 但实际上,它们完全不是同一个步骤。

明白这一点以后,你就会知道,文件内容读出来以后,不一定非要打印。你还可以做统计、筛选、清洗、判断,甚至写入另一个文件。

十二、一个常见误区:每次写文件都以为是在修改原文件内容中间某一段

新手刚接触文件时,脑子里很容易把文件想成文档编辑器。 觉得自己写一段代码,就像在 Word 里改某几行字一样自然。

但最基础的文件操作不是这样的。

在你当前这个阶段,最常见的行为其实只有三种:

整份读出来 整份重写 在末尾追加

也就是说,你现在不是在学高级文本编辑器,而是在学最基本的数据读写流程。

先把这三个动作吃透,后面再慢慢接触更复杂的文件定位、逐行处理、结构化存储,会轻松很多。

十三、完整演示一遍,从零创建到追加再到读取

下面我们做一个从头到尾的完整案例。 建议你一定亲自运行。

with open('my_notes.txt', 'w', encoding='utf-8') as f:    f.write('第一条:今天开始学文件操作\n')    f.write('第二条:已经理解读和写的区别\n')with open('my_notes.txt', 'a', encoding='utf-8') as f:    f.write('第三条:追加不会覆盖原内容\n')with open('my_notes.txt', 'r', encoding='utf-8') as f:    result = f.read()print(result)

输出结果:

第一条:今天开始学文件操作第二条:已经理解读和写的区别第三条:追加不会覆盖原内容

你可以暂停一下,问自己三个问题。

第一段为什么用 w因为要从零创建并写入初始内容

第二段为什么用 a因为要保留前面的内容,只新增一条

第三段为什么用 r因为最后要把文件全部读出来检查结果

如果这三个问题你都能自己答出来,说明你已经不只是会抄代码,而是真的开始理解文件操作了。

十四、初学者最容易犯的四个错

第一个错,用 w 追加内容。 结果不是追加,而是把旧内容覆盖掉了。

第二个错,忘了加 \n。 结果原本想分三行,最后全挤成一行。

第三个错,把读取和打印混为一谈。 以为 read() 本身就会自动显示内容。

第四个错,读写模式选错。 想读文件却用了 w,想追加却用了 r。

这些问题看起来不大,但会直接影响你对文件操作的理解。 所以这一章最重要的,不只是把代码跑通,还要把这些坑提前绕开。

十五、一个很实用的小技巧:先想结果,再决定怎么写

很多人写文件代码时,一上来就敲 open()。 其实更稳妥的思路是,先问自己结果是什么。

我最终是想看文件内容 还是想保存数据 还是想保留原内容继续补充

只要这个结果一明确,模式就很好选。

想看内容,用 r想重新生成,用 w想继续补充,用 a

你会发现,很多语法问题本质上都不是语法问题,而是思路没先想清楚。

十六、本章小练习

你可以立刻做下面这个练习,效果非常好。

第一步,创建一个 plan.txt 文件,写入两行学习计划:

今天学习文件读取 明天学习 CSV 文件

第二步,再追加一行:

后天开始学习异常处理

第三步,读取整个文件并打印出来

参考代码:

with open('plan.txt', 'w', encoding='utf-8') as f:    f.write('今天学习文件读取\n')    f.write('明天学习 CSV 文件\n')with open('plan.txt', 'a', encoding='utf-8') as f:    f.write('后天开始学习异常处理\n')with open('plan.txt', 'r', encoding='utf-8') as f:    content = f.read()print(content)

只要你亲手跑通这段代码,读、写、追加三件事基本就算彻底理顺了。

十七、本章总结

这一章其实只围绕三件事展开,但这三件事非常关键。

读文件,是把内容拿进程序。 写文件,是重新写入内容,原内容可能被覆盖。 追加文件,是在保留旧内容的基础上继续往后补。read() 读出来的通常是字符串。write() 不会自动换行,格式要自己控制。with 是最推荐的文件操作写法,因为更安全,也更清晰。

学到这里,文件读写的基础骨架你已经搭起来了。 下一章我们继续往前走,进入更常见的数据场景:处理 CSV 文件:表格数据的第一步。

最新文章

随机文章