文件系统 文件系统
1、什么是文件系统
操作系统提供给你操作硬盘的一个工具
2、为什么要使用文件:
为了永久存储数据
3、怎么用文件:
文件的路径分为:
相对路径
绝对路径
python中如何使用文件:
f = open('a.txt')
print(f.readable()) # 判断当前文件是否可读
print(f.writable()) # 判断当前文件是否可写
del f # 回收变量资源 python本身的垃圾回收机制,这步我们可以省略
f.close() # 回收操作系统的资源 python本身不会回收系统的资源,若我们忽略,则会导致系统内存资源浪费
python中with的用法:
with open('a.txt',mode='r')as rf #with 会自动帮你回收操作系统的资源,无需自己操作
python中默认打开文件的模式:
rt (read text) rb (read bytes)
with open(r'dira.txt',mode = 'rb')as f : #r的作用是转义,就是去除后边字符的特殊意义
打开文件的三中模式:
r :
- 只读
- 如果文件不存在,会报错
w : (慎用)
- 只写
- 如果文件不存在,则会新建一个文件写入数据
- 如果文件存在,即会将原数据覆盖,重新写入
a :
- 追加写
- 如果文件不存在,则会新建一个文件写入
- 如果文件存在数据,会在已有的数据后面追加数据
#控制文件读写内容的模式:
大前提:t、b模式不能单独使用,必须与r、w、a、之一结合使用
t(默认):文本模式
1、读写文件都是以字符串为单位
2、只能针对文本文件
3、必须指定encoding参数
b:二进制模式
1、读写文件都是以bytes/二进制 为单位
2、可以针对所有文件
3、一定不能指定encoding
with open('a.txt', mode = 'rt', encoding = 'utf-8')as f :
res = f.read()
print(type(res))
<class 'str'>
with open('a.txt', mode = 'wt', encoding = 'utf-8')as f :
s = 'sean'
f.write(s)
print(f)
<_io.TextIOWrapper name='a.txt' mode='wt' encoding='utf-8'>
#t模式只能用于操作文本文件,无论读写,都应该以字符串为单位,而存取硬盘的本质都是二进制的形式,当指定t模式时,内部帮我们做了编码和解码
#b模式的使用:
读写的都是二进制
操作文件的方法
读操作:
f.read() # 读取所有的内容,执行完该操作后,文件指针会移到文件末尾
f.readline() # 读取一行内容,光标移到第二行首部
f.readlines() #读取每一行内容,存放于列表
注意:
f.read() 与 f.readlines() 都是将内容一次性读入,如果内容过大会导致内存溢出,
若还想将内容全读入内存,则必须分多次读入,有两种方式实现:
# 方式一
with open('a.txt',mode='rt',encoding='utf-8') as f:
for l in f:
print(l) # 同时只读入一行内容到内存中
# 方式二
with open('1.mp4',mode='rb') as f:
while True:
data=f.read(1024) # 同时只读入1024个Bytes到内存中
if len(data) == 0:
break
print(data)
判断文件方法:
f.readable() #文件是否可读
f.writable() #文件是否可写
f.close # 文件是否关闭
f.flush() # 立刻将文件内容刷到硬盘
控制文件内光标的移动:
若想读取文件某一特定位置的数据,则需要f.seek方法主动控制文件内的光标的移动:
f.seek(指针移动的字节数,模式控制)即:
f.seek(offset,whence)
offset:相对偏移度(光标移动位数),针对字节
whence:指定光标位置从何开始
0:从文件开头
1:从当前位置
2:从文件末尾
ntf-8:
中文是3个bytes
英文是1个bytes
gbk:
全部是2个bytes
open函数不设置encoding,默认是gbk
与encode没有关系,encoding只是一个参数
f.tell #查看当前文件指针距离文件头的位置