当前位置: 首页 > article >正文

Python基础:文件简单操作

🍃引言

手把手带你快速上手Python

Python基础专栏

一、🍃文件是什么 

变量是把数据保存到内存中. 如果程序重启/主机重启, 内存中的数据就会丢失。

要想能让数据被持久化存储, 就可以把数据存储到硬盘中. 也就是在文件中保存。

通过文件的后缀名, 可以看到文件的类型. 常见的文件的类型如下:

  • 文本文件 (txt)
  • 可执行文件 (exe, dll)
  • 图片文件 (jpg, gif)
  • 视频文件 (mp4, mov)
  • office 文件 (.ppt, docx)
  • 文件夹(目录),也是一种特殊的文件,目录文件
  • ......

即使都是文件,文件里面存储数据的内容/格式,也是差异很大的。

下面围绕着文本文件来展开

二、🍃文件路径

一个机器上, 会存在很多文件, 为了让这些文件更方面的被组织, 往往会使用很多的 "文件夹"(也叫做目录) 来整理文件.

实际一个文件往往是放在一系列的目录结构之中的.

为了方便确定一个文件所在的位置, 使用文件路径来进行描述.

一段路径:C:\Users\lenovo\source\repos

  • D: 表示 盘符. 不区分大小写。
  • 每一个 \ 表示一级目录. 当前 repos 就是放在 "C 盘下的  Users 目录下的 lenovo 目录下的 source 目录中" 。
  • 目录之间的分隔符, 可以使用 \ 也可以使用 /. 一般在编写代码的时候使用 / 更方便(因为\ 在字符串里有特定的含义:可以表示“转义字符”,\\在字符串中表示一个\ )。

上述以盘符开头的路径, 我们也称为绝对路径。除了绝对路径之外, 还有一种常见的表示方式是相对路径。相对路径需要先指定一个基准目录, 然后以基准目录为参照点, 间接的找到目标文件。描述一个文件的位置, 使用绝对路径和相对路径都是可以的. 

三、🍃文件操作

要使用文件, 主要是通过文件来保存数据, 并且在后续把保存的数据读取出来.

但是要想读写文件, 需要先 "打开文件", 读写完毕之后还要 "关闭文件".

1. 打开文件 

使用内建函数 open 打开一个文件。

f = open('e:/python/test.txt','r')

第一个参数是一个字符串, 表示要打开的文件路径

第二个参数是一个字符串, 表示打开方式。其中‘r’是打开方式:

  • r 表示read,以读的方式打开
  • w 表示 write,以写的方式打开
  • a 表示 append,也是以写的方式打开,把内容写到原有文件内容的末尾
  • ......

如果打开文件成功, 返回一个文件对象。后续的读写文件操作都是围绕这个文件对象展开。

当文件不存在的时候,尝试按照读的方式打开,会抛出异常:文件没有找到

理解一下这里的 f

f 是open的返回值,是一个文件对象

文件的内容是在硬盘上的

此处的文件对象是在内存上的一个变量

后续的读写操作都是拿着这个文件对象来进行操作。

此处的文件对象就像是一个‘遥控器’一样

计算机中,也把这样的远程‘遥控器’称之为‘句柄’(handler)

f = open('e:/python/test.txt','r')
print(type(f))
print(f)

 

2. 关闭文件

使用 close 方法关闭已经打开的文件。

f.close()

注意:使用完毕的文件要记得及时关闭

一个程序能同时打开的文件个数, 是存在上限的。否则就会造成文件泄露,进一步导致其他部分的代码无法顺利打开文件了。

flist = []
count = 0
while True:f = open('e:/python/test.txt', 'r')flist.append(f)count += 1print(f'count = {count}')

如上面代码所示, 如果一直循环的打开文件, 而不去关闭的话, 就会出现上述报错.

当一个程序打开的文件个数超过上限, 就会抛出异常.

注意: 上述代码中, 使用一个列表来保存了所有的文件对象.

如果不进行保存, 那么 Python 内置的垃圾回收机制, 会在文件对象销毁的时候自动关闭文件.

但是由于垃圾回收操作不一定及时, 所以我们写代码仍然要考虑手动关闭, 尽量避免依赖自动关闭.

在系统中,可以通过一些设置项,来配置打开文件的最大数目。

8189 + 3 = 8192 =》8192是2的13次方

计算机里的很多数据都是按照 2的多少次方来表示的

解释一下 3 是怎么来的

每个程序在启动的时候,都会默认打开3个文件

1.标准输入 ------ >键盘

2.标准输出 ------ > 显示器

3.标准错误 ------ > 显示器

3.写文件

文件打开之后, 就可以写文件了.

  • 写文件, 要使用写方式打开,open 第二个参数设为 'w'
  • 使用 write 方法写入文件.
f = open('e:/python/test.txt','w')
f.write('hello')
f.close()

用记事本打开文件, 即可看到文件修改后的内容.

  •  如果是使用 'r' 方式打开文件, 则写入时会抛出异常.
f = open('e:/python/test.txt','r')
f.write('hello')
f.close()

  • 使用 'w' 一旦打开文件成功, 就会清空文件原有的数据。
  • 使用 'a' 实现 "追加写", 此时原有内容不变, 写入的内容会存在于之前文件内容的末尾。
f = open('e:/python/test.txt','w')
f.write('hello')
f.close()f = open('e:/python/test.txt','a')
f.write(' word')
f.close()
  • 针对已经关闭的文件对象进行写操作, 会抛出异常.

4. 读文件

  • 读文件内容需要使用 'r' 的方式打开文件
  • 使用 read 方法完成读操作. 参数表示 "读取几个字符"
f = open('e:/python/test.txt','r')
result = f.read(2)
print(result)
f.close()

在文件中存储一段诗:

打印时可能会出现乱码或者抛出异常:

这是因为两者的编码不一致

代码中是尝试按照 gbk 来解析的,文件是UTF-8编码,所以可以让代码按照UTF-8 来进行解析

使用关键字传参:

f = open('e:/python/test.txt','r',encoding = 'UTF8')
result = f.read(2)
print(result)
f.close()

 

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

f = open('e:/python/test.txt','r',encoding = 'UTF8')
for line in f:print(f'line = {line}')
f.close()

注意: 由于文件里每一行末尾都自带换行符, print 打印一行的时候又会默认加上一个换行符, 因此打印结果看起来之间存在空行.

使用 print(f'line = {line}', end='') 手动把 print 自带的换行符去掉.

f = open('e:/python/test.txt','r',encoding = 'UTF8')
for line in f:print(f'line = {line}', end = '')
f.close()

使用 readlines 直接把文件整个内容读取出来, 返回一个列表. 每个元素即为一行

f = open('e:/python/test.txt','r',encoding = 'UTF8')
lines = f.readlines()
print(lines)
f.close()

 

此处的 \n 即为换行符.

四、🍃使用上下文管理器 

打开文件之后, 是容易忘记关闭的. Python 提供了上下文管理器 , 来帮助程序员自动关闭文件.

  • 使用 with 语句打开文件.
  • 当 with 内部的代码块执行完毕后, 就会自动调用关闭方法.
with open('e:/python/test.txt','r',encoding = 'UTF8') as f:lines =  f.readlines()print(lines)
http://www.lryc.cn/news/2399421.html

相关文章:

  • 深度学习项目之RT-DETR训练自己数据集
  • 以太网帧结构和封装【二】-- IP头部信息
  • mysql 悲观锁和乐观锁(—悲观锁)
  • Promtail采集服务器本地日志存储到Loki
  • python第31天打卡
  • 4.1 HarmonyOS NEXT原生AI能力集成:盘古大模型端侧部署与多模态交互实战
  • 学习STC51单片机27(芯片为STC89C52RCRC)
  • PAT-甲级JAVA题解(更新中...)
  • Deep Chat:重塑人机对话边界的开源智能对话框架—— 让下一代AI交互无缝融入你的应用
  • DA14531_beacon_大小信标设备开发
  • 【算法训练营Day06】哈希表part2
  • Word双栏英文论文排版攻略
  • 乡村三维建模 | 江苏农田无人机建模案例
  • 2025 5 月 学习笔记
  • SpringBoot(七) --- Redis基础
  • Oracle 故障实例 - 通过备份恢复到某时间点 故障恢复
  • 滑动智能降级:Glide优化加载性能的黑科技
  • 【前端并发请求控制:必要性与实现策略】
  • LeetCode 139. 单词拆分(Word Break) - 动态规划深度解析
  • @Prometheus动态配置管理-ConsulConfd
  • CentOS7 + JDK8 虚拟机安装与 Hadoop + Spark 集群搭建实践
  • 从OSI到TCP/IP:网络协议的演变与作用
  • Stream流性能分析及优雅使用
  • iOS 电子书听书功能的实现
  • 【和春笋一起学C++】(十七)C++函数新特性——内联函数和引用变量
  • GitHub 趋势日报 (2025年06月02日)
  • 卫星的“太空陀螺”:反作用轮如何精准控制姿态?
  • proteus新建工程
  • 缓存击穿 缓存穿透 缓存雪崩
  • RTC实时时钟DS1338Z-33/PT7C433833WEX国产替代FRTC1338S