文件系统

文件系统

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 :

  1. 只读
  2. 如果文件不存在,会报错

w : (慎用)

  1. 只写
  2. 如果文件不存在,则会新建一个文件写入数据
  3. 如果文件存在,即会将原数据覆盖,重新写入

a :

  1. 追加写
  2. 如果文件不存在,则会新建一个文件写入
  3. 如果文件存在数据,会在已有的数据后面追加数据
#控制文件读写内容的模式:
大前提: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 #查看当前文件指针距离文件头的位置
原文地址:https://www.cnblogs.com/127-2933/p/11867912.html