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 打开一个文件。

python 复制代码
f = open('e:/python/test.txt','r')

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

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

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

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

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

理解一下这里的 f

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

文件的内容是在硬盘上的

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

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

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

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

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

2. 关闭文件

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

python 复制代码
f.close()

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

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

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

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

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

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

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

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

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

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

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

解释一下 3 是怎么来的

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

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

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

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

3.写文件

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

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

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

  • 如果是使用 'r' 方式打开文件, 则写入时会抛出异常.
python 复制代码
f = open('e:/python/test.txt','r')
f.write('hello')
f.close()
  • 使用 'w' 一旦打开文件成功, 就会清空文件原有的数据。
  • 使用 'a' 实现 "追加写", 此时原有内容不变, 写入的内容会存在于之前文件内容的末尾。
python 复制代码
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 方法完成读操作. 参数表示 "读取几个字符"
python 复制代码
f = open('e:/python/test.txt','r')
result = f.read(2)
print(result)
f.close()

在文件中存储一段诗:

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

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

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

使用关键字传参:

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

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

python 复制代码
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 自带的换行符去掉.

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

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

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

此处的 \n 即为换行符.

四、🍃使用上下文管理器

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

  • 使用 with 语句打开文件.
  • 当 with 内部的代码块执行完毕后, 就会自动调用关闭方法.
python 复制代码
with open('e:/python/test.txt','r',encoding = 'UTF8') as f:
    lines =  f.readlines()
    print(lines)
相关推荐
蓝婷儿5 分钟前
6个月Python学习计划 Day 15 - 函数式编程、高阶函数、生成器/迭代器
开发语言·python·学习
love530love13 分钟前
【笔记】在 MSYS2(MINGW64)中正确安装 Rust
运维·开发语言·人工智能·windows·笔记·python·rust
水银嘻嘻1 小时前
05 APP 自动化- Appium 单点触控& 多点触控
python·appium·自动化
狐凄1 小时前
Python实例题:Python计算二元二次方程组
开发语言·python
烛阴2 小时前
Python枚举类Enum超详细入门与进阶全攻略
前端·python
Mikhail_G3 小时前
Python应用函数调用(二)
大数据·运维·开发语言·python·数据分析
weixin_472339463 小时前
使用Python提取PDF元数据的完整指南
java·python·pdf
QQ676580084 小时前
基于 PyTorch 的 VGG16 深度学习人脸识别检测系统的实现+ui界面
人工智能·pytorch·python·深度学习·ui·人脸识别
木木黄木木4 小时前
Python制作史莱姆桌面宠物!可爱的
开发语言·python·宠物
胖哥真不错5 小时前
Python基于方差-协方差方法实现投资组合风险管理的VaR与ES模型项目实战
python·毕业设计·课程设计·方差-协方差方法·投资组合风险管理·var与es模型