03_02、文件处理

一、文件的基本操作

  1. 什么是文件?

    操作系统暴露给用户操作硬盘的接口

  2.代码如何操作文件?

    1、三步骤:

      1. 使用open打开文件
      2. 使用相关方法操作文件
      3. 关闭文件

    2、扩展补充

      路径:
        相对路径
        绝对路径

      当路径写成绝对路径时候,路径中有斜杠出现时候,在路径前面加个r
      r'E:\python21\day10\a.txt'

    3、文件打开简便方法 

      with上下文管理器

 

二、控制文件读写的操作模式

  1. r:  读取模式

      路径不存在,会报错

      路径存在直接读取,但不能向文件中写内容

  2. w:  写入模式

      如果路径不存在:

        会创建出来一个新的路径

      如果路径存在:

        1. 会把文件内容清空

        2. 在执行写操作

 

  3. a:  追加模式

      如果路径不存在:

        会创建出来一个新的路径

      如果路径存在:

        在文件末尾添加新内容

 

  4、+模式

    r+   w+   a+ :可读可写
    在平时工作中,我们只单纯使用r/w/a,要么只读,要么只写,一般不用可读可写的模式

三、控制文件读写内容的模式

  1、t模式:文本模式

    1、t 模式:

      前文我们定的文件打开模式 r  w  a,其实默认就是rt   wt  at

    2、注意:

      1. 文件中的内容全部都是以字符串为单位

      2. 写入的内容只能是字符串

      3. 必须指定encoding参数

    3、原因:

      t 模式只能用于操作文本文件,无论读写,都应该以字符串为单位,而存取硬盘本质都是二进制的形式,当指定 t 模式时,内部帮我们做了编码与解码

  2、b模式:二进制模式

    1、b模式:

      rb  wb  ab

    2、注意:

      1. 文件中的内容都以字节(bytes)为单位

      2. 写入的内容必须是二进制

      3. 一定不能指定encoding参数

    3、原因:   

      1、相比于t模式在操作纯文本文件方面t模式帮我们省去了编码与解码的环节,b模式则需要手动编码与解码,所以此时t模式更为方便

      2、针对非文本文件(如图片、视频、音频等)只能使用b模式,换句话说b模式能执行所有的数据类型

 

四、操作文件的方法

  1. 读相关的方法

    1、读操作

      f.read() # 读取所有内容,执行完该操作后,文件指针会移动到文件末尾

      f.readline() # 读取一行内容,光标移动到第二行首部

      f.readlines() # 读取每一行内容,存放于列表中

    2、注意:

      f.read()与f.readlines()都是将内容一次性读入内容,如果内容过大会导致内存溢出,若还想将内容全读入内存,则必须分多次读入,有两种实现方式:

      1.方式一

        with open('a.txt',mode='rt',encoding='utf-8') as f:
        for line in f:
        print(line) # 同一时刻只读入一行内容到内存中

      2.方式二

        with open('1.mp4',mode='rb') as f:
        while True:
        data=f.read(1024) # 同一时刻只读入1024个Bytes到内存中
        if len(data) == 0:
        break
        print(data)


  2、写相关操作

      f.write('1111\n222\n') # 针对文本模式的写,需要自己写换行符

      f.write('1111\n222\n'.encode('utf-8')) # 针对b模式的写,需要自己写换行符

      f.writelines(['333\n','444\n']) # 文本模式

      f.writelines([bytes('333\n',encoding='utf-8'),'444\n'.encode('utf-8')]) #b模式

  3. 其他相关方法

    f.readable() # 文件是否可读

    f.writable() # 文件是否可读

    f.closed # 文件是否关闭

    f.encoding # 如果文件打开模式为b,则没有该属性

    f.flush() # 立刻将文件内容从内存刷到硬盘

    f.name

五、文件中控制光标的移动

  1、不同模式下指针移动的单位

    在b模式下的read(n),文件内指针的移动n以字节为单位

    在t模式下的read(n),文件内指针的移动n以字符为单位

 

   2、f.seek主动控制文件内指针的移动

    1、f.seek(offset,whence):

      offset:指针移动的字节数

      whence:模式控制

      之前文件内指针的移动都是由读/写操作而被动触发的,若想读取文件某一特定位置的数据,则需要用f.seek方法主动控制文件内指针的移动

     2、模式控制:

      0: 默认的模式,该模式代表指针移动的字节数是以文件开头为参照的

      1: 该模式代表指针移动的字节数是以当前所在的位置为参照的

      2: 该模式代表指针移动的字节数是以文件末尾的位置为参照的

      强调:其中0模式可以在t或者b模式使用,而1跟2模式只能在b模式下用

     3、f.tell():

      查看光标当前位置

六、修改文件内容

  1、光标指定位置,'r + w’可读可写模式修改文件

 

  2、repalce修改

 

 

posted @   三三得九86  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示