Python学习-----4.基础语法(3)---文件专题

发布于:2025-09-11 ⋅ 阅读:(13) ⋅ 点赞:(0)

目录

前言

文件

文件是什么

文件路径

文件操作

1. 打开文件

2. 关闭文件

3. 写文件

4. 读文件

关于中文的处理

使用上下文管理器

结语


前言

        在编程世界中,数据是程序运行的核心载体,但程序运行时依赖的变量仅能将数据临时存储在内存中 —— 一旦程序重启、主机断电或意外中断,内存中的数据便会瞬间丢失,无法满足长期存储与复用的需求。而文件,作为计算机系统中持久化存储数据的核心载体,恰好解决了这一痛点:它能将数据固化到硬盘等永久存储设备中,即便设备重启,数据依然完好保留,成为连接程序临时运算与长期数据管理的关键桥梁。

        对于刚接触编程的初学者而言,文件操作是入门阶段必须掌握的核心技能之一。无论是日常记录数据、读取配置信息,还是后续处理日志、分析文本数据,都离不开对文件的基础操作。在众多文件类型中,文本文件(.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. 打开文件

使用内建函数 open 打开一个文件.
# 文件的操作
# 文件操作
# 打开文件,后边的是以UTF-8编码的格式打开文件,这是为了兼容中文
f = open('text.txt', 'r', encoding='utf-8')
1.第一个参数是一个字符串, 表示要打开的文件路径
2.第二个参数是一个字符串, 表示打开方式.
其中 r 表示按照读方式打开. w 表示按照写方式打开. a 表示追加写方式打开.
如果打开文件成功, 返回一个文件对象. 后续的读写文件操作都是围绕这个文件对象展开.
如果打开文件失败(比如路径指定的文件不存在), 就会抛出异常.如下图报错所示:

2. 关闭文件

使用 close 方法关闭已经打开的文件.
# 关闭文件
f.close()
使用完毕的文件要记得及时关闭!
一个程序能同时打开的文件个数 , 是存在上限的 .
# 一个程序能同时打开的文件个数,是存在上线的
flist = []
count = 0
while True:
    f = open('d:/test.txt', 'r')
    flist.append(f)
    count += 1
    print(f'count = {count}')
如果打开的文件个数达到了上限,然后接下来再打开文件,Python的编译器就会报出下述错误:
如上面代码所示 , 如果一直循环的打开文件 , 而不去关闭的话 , 就会出现上述报错 .
当一个程序打开的文件个数超过上限 , 就会抛出异常 .
        注意: 上述代码中 , 使用一个列表来保存了所有的文件对象 . 如果不进行保存 , 那么 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()

注意:像上述从盘符开始的文件路径就是绝对路径,但是需要注意的是不要像博主一样使用中文的名称,建议都是英文的啊!

运行结束之后,我们可以使用记事本(或者是直接在你的编译器里边找到这个文件直接也是可以打开的)打开这个文件,我们可以看到下述内容,就是成功的写入文件数据了:

如果是使用 'r' 方式打开文件, 则写入时会抛出异常
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()

读取的结果如下图所示:

如果文件是多行文本, 可以使用 for 循环一次读取一行

例如上述,先构造一个多行的文本文件.​​​​​​
接着使用下述代码可以实现多行文本内容打印到控制台上:
# 适用于文件中的数据有好几行的情况
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()
运行结果如下图所示:
使用 readlines 直接把文件整个内容读取出来, 返回一个列表. 每个元素即为一行
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()

运行结果如下所示:

此处的 \n 即为换行符.

关于中文的处理

上述代码当中,都有一个下边这样的代码:
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最后的基础:使用库,在使用库之后,就是面向对象的知识和数据处理等知识了(这一部分看博主的时间安排啦,有时间就会持续更新的!)我们下一篇博客不见不散!


网站公告

今日签到

点亮在社区的每一天
去签到