平时,生活中我们见到的电影(MP4)、歌曲(MP3)、图片(JPG)、文本(txt)、表格(xlsx)…都可以被称为 文件。
这些文件的格式和文件里面的内容可能不同,但是他们有一个共同特点:
数据都是保存在硬盘上的!!!
冯诺依曼体系:
CPU(运算器和控制器)、存储器、输入设备、输出设备
存储器 可以分为 内存和外存,
外存典型的就是硬盘
变量存储在内存中,文件存储在硬盘中
内存和硬盘的区别:
硬盘上存储的数据是以文件的形式来组织的~
注:文件夹(目录)也是一种特殊的文件 -> 目录文件
D:\Program Files\Tencent\QQ\Bin\QQ.exe
上述是小戴电脑中 qq.exe 这个文件的位置,
我们把这一层层的目录构成的字符串,称为 “文件的路径”
知道了文件路径,就可以知道这个文件在硬盘上的详细位置,也就可以进一步知道这个文件里都有啥~ 方便使用这个文件~
文件路径也可以视为是 文件 在硬盘上的标识
每个文件对应的路径是唯一的
目录名之间,使用 \
来分割,使用 /
其实也行
绝对路径:
指的是绝对位置,完整地描述文件位置的路径,通常是从盘符开始的路径
比如:D:\Program Files\Tencent\QQ\Bin\QQ.exe
相对路径:
是从当前文件所在的文件夹开始的路径
./QQ.exe
:也是在当前文件夹里查找QQ.exe文件, ./
表示的是当前文件夹,可以省略../QQ.exet
:从当前文件夹的上一级文件夹里查找 QQ.exe 文件。../
表示的是上一级文件夹路径书写的三种方式
\\
(正斜杠容易与转义字符混淆)
file = open(‘D:\Program Files\Tencent\QQ\Bin\QQ.exe’)
r'\'
(推荐)
file = open(r’D:\Program Files\Tencent\QQ\Bin\QQ.exe’)
'/'
(推荐)
file = open(‘D:/Program Files/Tencent/QQ/Bin/QQ.exe’)
先在自己的电脑 E盘上建立一个叫做 “文本” 的目录,然后再目录底下新建一个 “test.txt” 文件
打开方式:
如果准备按照读方式打开的文件不存在的时候,就抛出了文件没找到的异常
open 函数
的返回值是一个 文件对象
文件的内容是在硬盘上的,此处的文件对象,则是内存上的一个变量~ 后续读写文件操作,都是拿着这个文件对象来进行操作的~
读文件内容使用 r
的方式打开文件,使用 read
方法完成读操作,参数表示 “读取几个字符”
f = open('E:/文本/test.txt', 'r')
result = f.read(2)
print(result)
f.close()
read() 全部读取出来
readline() 读取一行
f = open('E:/文本/test.txt', 'r', encoding='utf8')
print(f.readline().strip()) # 小戴真棒
print(f.readline()) # 小戴会更加棒\n
f.close()
readlines() 返回一个列表,列表中的每个元素是原文件的每一行
f = open('E:/文本/test.txt', 'r', encoding='utf8')
list = f.readlines()
print(list) # ['小戴真棒\n', '小戴会更棒']
f.close()
for 循环读取。 文件句柄是一个迭代器。特点是每次循环只在内存中占一行的数据,非常节省内存
f = open('E:/文本/test.txt', 'r', encoding='utf8')
for line in f:
print(line.strip())
f.close()
注意:
实际开发的时候需要保证,文件内容的编码方式和代码中操作文件的编码方式要匹配
此处,我们使用的方法,是让代码按照 utf 8 来进行处理,相比于 gbk,utf8 是使用更广泛的编码方式
文件打开之后,就可以写文件了
open
第二个参数设为 'w'
write
方法写入文件f = open('E:/文本/test.txt', 'w')
f.write('hello')
f.close()
用记事本打开文件之后,即可看到文件修改后的内容
如果使用 'r'
方式打开文件,则写入时会抛出异常
使用 'w'
打开文件,就会清空文件原有的数据, 那咱们想要在原本数据基础上添加数据,该怎么办呢?
使用 a
可以实现 “追加写”,此时原有的内容不变,写入的内容会存在于之前文件内容的末尾
如果文件对象已经被关闭,意味着系统中和该文件相关的内容资源已经释放了,强行去写,就会出异常
使用 close
方法关闭已经打开的文件
f.close()
一个程序能同时打开的文件个数,是存在上限的
使用完毕的文件要记得及时关闭
打开文件,其实是在申请一定的系统资源,不再使用文件的时候,资源就应该及时释放,否则就可能造成文件资源泄露,进一步的导致其他部分的代码无法顺利打开文件了~
文件资源泄露,其实是一个很重要的问题,不会在第一时间暴露出来,而是在不知情时给进行释放~
Python 有个重要的机制—— 垃圾回收机制(GC),自动的把不使用的变量,给进行释放,可以让我们一定程度上避免上述问题,但是也不能完全依赖自动释放机制,因为自动释放不一定及时~