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

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)

相关文章:

  • StringRedisTemplete使用
  • 网络安全中网络诈骗的攻防博弈
  • Pluto论文阅读笔记
  • RabbitMQ 开机启动配置教程
  • 各个布局的区别以及示例
  • Python 中 Django 中间件:原理、方法与实战应用
  • [论文阅读]PPT: Backdoor Attacks on Pre-trained Models via Poisoned Prompt Tuning
  • STP-生成树
  • 第四十二天打卡
  • MCP客户端Client开发流程
  • PyTorch——优化器(9)
  • Java设计模式深度解析:策略模式的核心原理与实战应用
  • 完成一个可交互的k8s管理平台的页面开发
  • MYSQL(二) ---MySQL 8.4 新特性与变量变更
  • Flutter快速上手,入门教程
  • 从OCR到Document Parsing,AI时代的非结构化数据处理发生了什么改变?
  • Docker 部署 Python 的 Flask项目
  • Apache POI操作Excel详解
  • 从上下文学习和微调看语言模型的泛化:一项对照研究 -附录
  • 一台电脑联网如何共享另一台电脑?网线方式
  • 网站建设资料 优帮云/百度下载app安装
  • 亚马逊网站建设的目的/给公司建网站需要多少钱
  • 威海住房和城乡建设厅网站/全网热搜关键词排行榜
  • 青岛网站建设方案咨询/市场营销教材电子版
  • 文案转行做网站编辑/推广关键词
  • 简单小网站/怎么做app推广代理