目录
前言
在编程世界中,数据是程序运行的核心载体,但程序运行时依赖的变量仅能将数据临时存储在内存中 —— 一旦程序重启、主机断电或意外中断,内存中的数据便会瞬间丢失,无法满足长期存储与复用的需求。而文件,作为计算机系统中持久化存储数据的核心载体,恰好解决了这一痛点:它能将数据固化到硬盘等永久存储设备中,即便设备重启,数据依然完好保留,成为连接程序临时运算与长期数据管理的关键桥梁。
对于刚接触编程的初学者而言,文件操作是入门阶段必须掌握的核心技能之一。无论是日常记录数据、读取配置信息,还是后续处理日志、分析文本数据,都离不开对文件的基础操作。在众多文件类型中,文本文件(.txt) 以其结构简单、可读性强的特点,成为学习文件操作的最佳起点 —— 它无需复杂的解析逻辑,能直观体现 “打开 - 读写 - 关闭” 的完整流程,帮助初学者快速建立对文件操作的核心认知。
本文将围绕 Python 中的文本文件操作展开,从文件的基本概念、路径表示方法入手,逐步讲解文件的打开、关闭、读取、写入等核心操作,同时针对中文编码、文件资源管理等新手易踩的 “坑” 提供解决方案,最终帮助大家掌握安全、高效的文件操作方法,为后续处理更复杂的文件类型(如 Excel、CSV、JSON 等)打下坚实基础。
更多相关知识欢迎进入博主主页了解:浩瀚星河2023-CSDN博客
文件
文件是什么
变量是把数据保存到内存中. 如果程序重启/主机重启, 内存中的数据就会丢失.也就是说,变量的保存数据就是临时保存在内存当中的,但是不是长久的保存,如果想要持久化的存储,我们就需要用到文件,也就是 要想能让数据被持久化存储, 就可以把数据存储到硬盘中. 也就是在 文件 中保存.在 Windows "此电脑" 中, 看到的内容都是 文件.如下图所示:文件名有很多的后缀:
通过文件的后缀名, 可以看到文件的类型. 常见的文件的类型如下:1.文本文件 (txt)2.可执行文件 (exe, dll)3.图片文件 (jpg, gif)4.视频文件 (mp4, mov)5.office 文件 (.ppt, docx)6.其他类型的文件等,具体可以自己自行查询!博主的博客当中主要研究的是最简单的文本文件(txt).
另外提一点:下述是博主D盘的文件夹名称, 博主建议,图片中红框当中的中文字体还是少写 ,也是就是说, 博主建议,作为使用电脑的小白而言,最好的养成电脑的方法就是尽量的英文化,减少汉语的命名方法(毕竟微软的系统或者苹果的系统都是国外的嘛),否则会出现一些难以预估的错误 (博主就是刚开始没人建议过这些,是一个纯小白,导致博主遇到了很多因为中文化导致的错误,因此就会很难受,包括现在博主还在修改小白时期因为中文化命名文件夹带来的缺陷!建议不用中文化,但是不重要的文件夹可以适当的中文化!)
文件路径
一个机器上, 会存在很多文件, 为了让这些文件更方面的被组织, 往往会使用很多的 "文件夹"(也叫做目录) 来整理文件.实际一个文件往往是放在一系列的目录结构之中的.为了方便确定一个文件所在的位置, 使用 文件路径 来进行描述.例如, 上述截图中的 QQ.exe 这个文件, 描述这个文件的位置, 就可以使用路径D:\program\qq\Bin\QQ.exe 来表示.1.D: 表示 盘符. 不区分大小写.2.每一个 \ 表示一级目录.当前 QQ.exe 就是放在 "D 盘下的program 目录下的 qq 目录下的 Bin 目录中" .3.目录之间的分隔符, 可以使用 \ 也可以使用 / . 一般在编写代码的时候使用 / 更方便上述以 盘符 开头的路径, 我们也称为 绝对路径.除了绝对路径之外, 还有一种常见的表示方式是 相对路径.相对路径需要先指定一个基准目录, 然后以基准目录为参照点, 间接的找到目标文件.博客当中暂时不详细介绍,后续会继续补充说明的.描述一个文件的位置, 使用 绝对路径 和 相对路径 都是可以的. 对于新手来说, 使用 绝对路径 更简单更好理解, 也不容易出错
文件操作
要使用文件, 主要是通过文件来保存数据, 并且在后续把保存的数据读取出来.但是要想读写文件, 需要先 "打开文件", 读写完毕之后还要 "关闭文件".
1. 打开文件
# 文件的操作
# 文件操作
# 打开文件,后边的是以UTF-8编码的格式打开文件,这是为了兼容中文
f = open('text.txt', 'r', encoding='utf-8')
1.第一个参数是一个字符串, 表示要打开的文件路径2.第二个参数是一个字符串, 表示打开方式.其中 r 表示按照读方式打开. w 表示按照写方式打开. a 表示追加写方式打开.如果打开文件成功, 返回一个文件对象. 后续的读写文件操作都是围绕这个文件对象展开.如果打开文件失败(比如路径指定的文件不存在), 就会抛出异常.如下图报错所示:

2. 关闭文件
# 关闭文件
f.close()
# 一个程序能同时打开的文件个数,是存在上线的
flist = []
count = 0
while True:
f = open('d:/test.txt', 'r')
flist.append(f)
count += 1
print(f'count = {count}')

如上面代码所示 , 如果一直循环的打开文件 , 而不去关闭的话 , 就会出现上述报错 .当一个程序打开的文件个数超过上限 , 就会抛出异常 .注意: 上述代码中 , 使用一个列表来保存了所有的文件对象 . 如果不进行保存 , 那么 Python 内置的垃圾回收机制, 会在文件对象销毁的时候自动关闭文件 . 但是由于垃圾回收操作不一定及时, 所以我们写代码仍然要考虑手动关闭 , 尽量避免依赖自动关闭 .
3. 写文件
文件打开之后, 就可以写文件了.写文件, 要使用写方式打开, open 第二个参数设为 'w'使用 write 方法写入文件.
# 写文件,使用w会直接删除文件当中的所有内容
f = open('E:/Repository/Python-language-repository/Study-Project/2025-8-16-3.Python基础语法(3)/text.txt', 'w', encoding='utf-8')
f.write('hello')
f.close()
注意:像上述从盘符开始的文件路径就是绝对路径,但是需要注意的是不要像博主一样使用中文的名称,建议都是英文的啊!
运行结束之后,我们可以使用记事本(或者是直接在你的编译器里边找到这个文件直接也是可以打开的)打开这个文件,我们可以看到下述内容,就是成功的写入文件数据了:
f = open('E:/Repository/Python-language-repository/Study-Project/2025-8-16-3.Python基础语法(3)/text.txt', 'r', encoding='utf-8')
f.write('hello')
f.close()
运行结果报出的异常如下所示:
使用 'w' 一旦打开文件成功, 就会清空文件原有的数据.使用 'a' 实现 "追加写", 此时原有内容不变, 写入的内容会存在于之前文件内容的末尾
f = open('E:/Repository/Python-language-repository/Study-Project/2025-8-16-3.Python基础语法(3)/text.txt', 'w', encoding='utf-8')
f.write('hello')
f.close()
# 写文件,使用a可以追加写
f = open('E:/Repository/Python-language-repository/Study-Project/2025-8-16-3.Python基础语法(3)/text.txt', 'a')
f.write('world')
f.close()
上述的运行结果如下图所示(博主这里没使用记事本,下去大家可以尝试使用查看文本文件):
f = open('E:/Repository/Python-language-repository/Study-Project/2025-8-16-3.Python基础语法(3)/text.txt', 'w', encoding='utf-8')
f.write('hello')
f.close()
f.write('world')
运行结果如下图所示:

4. 读文件
读文件内容需要使用 'r' 的方式打开文件使用 read 方法完成读操作. 参数表示 "读取几个字符"
# 读文件
f = open('E:/Repository/Python-language-repository/Study-Project/2025-8-16-3.Python基础语法(3)/text.txt', 'r')
# 使用read()方法读取文件,括号内部就是读取的字节数(字符数)
result = f.read(2)
print(result)
f.close()
读取的结果如下图所示:

# 适用于文件中的数据有好几行的情况
f = open('E:/Repository/Python-language-repository/Study-Project/2025-8-16-3.Python基础语法(3)/test.txt', 'r', encoding='utf-8')
for line in f:
print(f'line = {line}')
f.close()
运行结果如下所示:

注意: 由于文件里每一行末尾都自带换行符, print 打印一行的时候又会默认加上一个换行符, 因此 打印结果看起来之间存在空行.使用 print(f'line = {line}', end='') 可以手动把 print 自带的换行符去掉.例如下述代码:
# 去掉换行符
f = open('E:/Repository/Python-language-repository/Study-Project/2025-8-16-3.Python基础语法(3)/test.txt', 'r', encoding='utf-8')
for line in f:
print(f'line = {line}', end='')
f.close()

f = open('E:/Repository/Python-language-repository/Study-Project/2025-8-16-3.Python基础语法(3)/test.txt', 'r', encoding='utf-8')
lines = f.readlines()
print(lines)
f.close()
运行结果如下所示:
关于中文的处理
encoding='utf-8'
实际上,这就是对中文的处理,采用上述的编码,才不会出现报错和乱码的现象:如果不这样处理的话,那么编译器很有可能会出现报错和异常
我们大概都知道:
当文件内容存在中文的时候 , 读取文件内容不一定就顺利 .同样上述代码 , 有的同学执行时可能会出现异常:
也有的同学是出现了乱码:![]()
计算机表示中文的时候, 会采取一定的编码方式, 我们称为 "字符集"所谓 "编码方式" , 本质上就是使用数字表示汉字.我们知道, 计算机只能表示二进制数据. 要想表示英文字母, 或者汉字, 或者其他文字符号, 就都要通过编码. 最简单的字符编码就是 ascii. 使用一个简单的整数就可以表示英文字母和阿拉伯数字. 但是要想表示汉字, 就需要一个更大的码表. 一般常用的汉字编码方式, 主要是 GBK 和 UTF-8 必须要保证文件本身的编码方式, 和 Python 代码中读取文件使用的编码方式匹配, 才能避免出现上述问 题.Python3 中默认打开文件的字符集跟随系统, 而 Windows 简体中文版的字符集采用了 GBK, 所以如果文件本身是 GBK 的编码, 直接就能正确处理.如果文件本身是其他编码(比如 UTF-8), 那么直接打开就可能出现上述问题

如果此处的编码为 ANSI , 则表示 GBK 编码.如果此处为 UTF-8 , 则表示 UTF-8 编码.
此时修改打开文件的代码, 给 open 方法加上 encoding 参数,显式的指定为和文本相同的字符集, 问题 即可解决:
f = open('d:/test.txt', 'r', encoding='utf8')
PS: 字符编码问题, 是编程中一类比较常见, 又比较棘手的问题.需要对于字符编码有一定的理解, 才能从容应对.大家可以参考腾讯官方账号发表的帖子, 详细介绍了里面的细节.博主只能表示看了这个帖子,感悟颇多的!
使用上下文管理器
打开文件之后, 是容易忘记关闭的.Python 提供了 上下文管理器, 来帮助程序猿自动关闭文件.使用 with 语句打开文件.当 with 内部的代码块执行完毕后, 就会自动调用关闭方法.
# 使用上下文管理器,自动关闭文件
with open('E:/Repository/Python-language-repository/Study-Project/2025-8-16-3.Python基础语法(3)/test.txt', 'r', encoding='utf8') as f:
lines = f.readlines()
print(lines)
结语
至此,我们已完整梳理了 Python 中文本文件操作的核心知识:从理解文件的 “持久化存储” 本质,到掌握绝对路径的正确表示;从通过
open()
函数指定模式打开文件、用read()
/write()
完成读写,到牢记close()
关闭文件以释放资源;更重要的是,我们解决了中文编码不匹配导致的乱码或报错问题,还学会了用with
上下文管理器实现文件的自动关闭,规避了 “忘记关文件” 的潜在风险。这些基础操作看似简单,却是后续进阶学习的重要基石。例如,当你需要处理日志文件时,会用到 “追加写(a 模式)”;当你分析大量文本数据时,“逐行读取(for 循环)” 能帮你节省内存;当你处理包含中文的配置文件时,
encoding='utf-8'
将成为必备参数。当然,文件操作的学习不止于此。除了文本文件,Python 还支持处理 Excel、CSV、JSON、图片等多种文件类型,后续可结合
pandas
(处理表格数据)、json
(处理 JSON 文件)等库进一步拓展能力。但请记住,所有复杂的文件操作,都建立在 “理解文件本质、规范操作流程” 的基础上。希望本文能帮助你避开新手常见的误区,真正掌握文件操作的核心逻辑。建议大家多动手实践:尝试创建不同内容的文本文件,用不同模式读写,观察文件内容和程序输出的变化 —— 只有通过实际操作,才能将知识内化为技能,从容应对后续开发中遇到的各类文件处理场景。
好了,以上便是Python基础知识(3)的全部内容了,下一篇博客便是Python最后的基础:使用库,在使用库之后,就是面向对象的知识和数据处理等知识了(这一部分看博主的时间安排啦,有时间就会持续更新的!)我们下一篇博客不见不散!