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)
相关推荐
笨鸟先飞,勤能补拙4 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
长和信泰光伏储能4 小时前
京津冀光伏发电:绿色能源的未来之路
python·能源
浦信仿真大讲堂5 小时前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
Gu Gu Study5 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境6 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境6 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd1236 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy12393102167 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb007 小时前
一个项目带你入门AI应用开发01
python
0566467 小时前
Python康复训练——常用标准库
开发语言·python·学习