十九、文件的操作

一、今日内容大纲

  1. 文件操作的初识

  2. 文件操作的读

  3. 文件操作的写

  4. 文件操作的追加

  5. 文件操作的其他模式

  6. 文件操作的其他功能

  7. 打开文件的另一种方式

  8. 文件操作的改

二、今日内容

  1. 文件操作的初识

    • 原来是借助软件去操作文件

    • 现在利用Python代码写一个很low的软件,去操作文件

      • 文件路径

      • 打开方式:读,写,追加,读写,写读....

      • 编码方式:utf-8,gbk,gb2312.....

      f1 = open('d:\好.txt',encoding='utf-8',mode='r')
      content = f1.read()
      print(content)
      f1.close()
      #代码解释:
      open 内置函数,open底层调用的是操作系统的接口。
      f1,变量,f1,fh,file_handler,f_h,文件句柄。 对文件进行的任何操作,都得通过文件句柄. 的方式。
      encoding:可以不写,不写参数,默认编码本:操作系统的默认的编码
      windows: gbk。
      linux: utf-8.
      mac utf-8.
      f1.close() 关闭文件句柄。
    • 报错原因:

      • UnicodeDecodeError:文件储存时与文件打开时编码运用不一致

      • 第二个错误:路径分隔符产生的问题

        r'C:\Users\oldboy\Desktop\主妇空姐模特联系方式.txt'

        解决方式:在C:\后面再加个\

  2. 文件操作的读

    r ,rb ,r+ ,r+b

    r:read()** read(n) readline() readlines() for

    rb:操作的是非文本的文件。图片,视频,音频


    # 在同一路径下创建一个叫读的练习的txt文本
    # 文本内容为:
    反反复复
    实实在在
    多多少少
    千千万万
    染发广播



    # read 全部读出来 **
    f = open('读的练习',encoding='utf-8',mode='r')
    content = f.read()
    print(content,type(content))
    f.close()
    #结果为:
    反反复复
    实实在在
    多多少少
    千千万万
    染发广播
    <class 'str'>
       

       
    # read(n) 按照字符读取
    f = open('读的练习',encoding='utf-8',mode='r')
    content = f.read(6)
    print(content)
    f.close()
    #结果:(注意,换行也算一个字符)
    反反复复





    # readline()
    f = open('读的练习',encoding='utf-8',mode='r')
    print( f.readline())
    print( f.readline())
    f.close()
    #结果:
    反反复复

    实实在在



    # readlines() 返回一个列表,列表中的每个元素是源文件的每一行。
    f = open('读的练习',encoding='utf-8',mode='r')
    print( f.readlines())
    f.close()
    #结果:['反反复复\n', '实实在在\n', '多多少少\n', '千千万万\n', '染发广播\n']
    f = open('读的练习',encoding='utf-8',mode='r')
    l1 = f.readlines()
    for i in l1:
       print(i)
    f.close()
    #利用for循环,把列表元素一个个显示

    #但是如果文本内容太多,则一次性全读出来会很占用内存,所以利用for来读取,for遍历句柄f的时候,是一行一行的读,读完一行,内存消失此行,读下一行,这样就不会占用太多内存



    # for 读取 ***
    f = open('读的练习', encoding='utf-8')
    # ['反反复复\n', '实实在在\n', '多多少少\n', '千千万万\n', '染发广播\n']
    for line in f:
       print(line)
    f.close()



    #rb:操作的是非文本的文件。图片,视频,音频
    f = open('壁纸1.jpg',mode='rb')
    content = f.read()
    print(content)
    f.close()
  3. 文件操作的写

    w ,wb ,w+ ,w+b

    w:文件不存在,则创建文件写入;如果文件存在,先清空,后写入

    wb:操作的是非文本的文件。图片,视频,音频

    以rb的模式将一个图片的内容以bytes类型全部读取出来,然后在以wb将全部读取出来的数据写入一个新文件,这样就完成了类似于一个图片复制的流程


    #w:文件不存在,则创建文件写入;如果文件存在,先清空,后写入
    #文件不存在,则创建文件写入
    f = open('文件的写',encoding='utf-8',mode='w')
    f.write('随便写一点')
    f.close()
    #结果是在路径下创建了一个新的叫文件的写的txt文件,里面的内容是随便写一点

    #文件存在,先清空,后写入
    f = open('文件的写',encoding='utf-8',mode='w')
    f.write('python真......')
    f.close()
    #文件的写的txt文件存在,先清空里面的内容,然后写入内容python真......



    #wb:操作的是非文本的文件。图片,视频,音频
    f = open('壁纸1.jpg',mode='rb')
    content = f.read()
    f.close()
    f1 = open('壁纸2.jpg',mode='wb')
    f1.write(content)
    f1.close()
  4. 文件操作的追加

    a,ab,a+,a+b

    a:没有文件,就创建文件追加内容;有文件,则在原文件追加内容


    # 没有文件创建文件,追加内容
    f = open('文件的追加',encoding='utf-8',mode='a')
    f.write('taibai niu 13')
    f.close()
    #在路径下创建了一个叫文件的追加的txt文件,并加入内容taibai niu 13

    # 有文件,在原文件的最后面追加内容。
    f = open('文件的追加',encoding='utf-8',mode='a')
    f.write('大壮,舒淇,b哥,雪飞')
    f.close()
    #结果:taibai niu 13大壮,舒淇,b哥,雪飞
  5. 文件操作的其他模式

    r+:读写:读并追加,顺序不能错


    # 读并追加 # 顺序不能错误。
    f = open('文件的读写',encoding='utf-8',mode='r+')  #只要不是写模式,就不能创建新的文件
    content = f.read()
    print(content)
    f.write('人的一切痛苦,本质都是对自己无能的愤怒。')
    f.close()
    #结果显示文件的内容,打开文件,最后追加内容人的一切痛苦,本质都是对自己无能的愤怒。

    # 错误示例:(不能先写在读,会报错)
    f = open('文件的读写',encoding='utf-8',mode='r+')
    f.write('人的一切痛苦,本质都是对自己无能的愤怒。')
    content = f.read()
    print(content)
    f.close()
  6. 文件操作的其他功能

    总结:

    ​ 三个大方向:

    读,四种模式:r ,rb ,r+ ,r+b

    写,四种模式:w ,wb ,w+ ,w+b

    追加,四种模式:a,ab,a+,a+b

    相应的功能:对文件句柄的操作:read read(n) readline() readlines() write

    ​ tell:获取光标的位置,光标的单位是字节

    ​ seek:调整光标的位置

    ​ flush:强制刷新,保存


    # tell 获取光标的位置 单位字节。
    f = open('文件的读写',encoding='utf-8')
    print(f.tell())    #光标初始位置
    content = f.read()
    print(f.tell())    #读完成后光标的位置
    f.close()


    # seek 调整光标的位置
    f = open('文件的读写', encoding='utf-8')
    f.seek(7)
    content = f.read()
    print(content)
    f.close()
    #比如文件内容是 大asdsa大,f.seek(7)后结果为:a大,说明光标移动到a大前边



    # flush 强制刷新(相当于在写时候强制给保存)
    f = open('文件的其他功能', encoding='utf-8',mode='w')
    f.write('fdshdsjgsdlkjfdf')
    f.flush()
    f.close()
  7. 打开文件的另一种方式

    1. with open()

      优点1,不用手动关闭文件句柄

      优点2,可同时操作多个句柄

      缺点:待续


      # 优点1: 不用手动关闭文件句柄
      with open('文件的读',encoding='utf-8') as f1:
         print(f1.read())
       

      # 优点2,可同时操作多个句柄
      with open('文件的读', encoding='utf-8') as f1,\
             open('文件的写', encoding='utf-8', mode='w')as f2:
         print(f1.read())
         f2.write('hfdsjkghkajhsdjg')

      # 缺点:待续。
  8. 文件操作的改

    文件操作改的流程:

    1. 以读的模式打开原文件

    2. 以写的模式创建一个新的文件

    3. 将原文件的内容读出来修改成新内容,写入新文件

    4. 将原文件删除

    5. 将新文件重命名成原文件

    具体代码:


    # low版:

    import os
    # 1, 以读的模式打开原文件。
    # 2,以写的模式创建一个新文件。
    with open('alex自述',encoding='utf-8') as f1,\
       open('alex自述.bak',encoding='utf-8',mode='w') as f2:
    # 3,将原文件的内容读出来修改成新内容,写入新文件。
       old_content = f1.read()
       new_content = old_content.replace('alex','SB')
       f2.write(new_content)
    os.remove('alex自述')
    os.rename('alex自述.bak','alex自述')


    #进阶版:(会默写)
    import os

    with open('alex自述',encoding='utf-8') as f1,\
       open('alex自述.bak',encoding='utf-8',mode='w') as f2:
       for line in f1:
           new_line = line.replace('SB','alex')
           f2.write(new_line)
    os.remove('alex自述')
    os.rename('alex自述.bak','alex自述')

  

三、今日回顾总结

  1. 文件操作初识

    • 打开文件 open()

    • 操作文件(文件句柄进行操作)

    • 关闭文件

    • 文件路径path,编码方式:encoding,mode

  2. 读,写,追加

    • 读:r,rb,r+,r+b

      • read()

      • read(n)

        • r:read(n) n是字符

        • rb:read(n) n是字节

      • readline()

      • readlines() ['第一行\n','第二行\n']

      • for循环 对文件句柄

    • 写:w,wb,w+,w+b

      • w:没有文件创建文件,写入新内容

      • w:有文件,先清空,在写入新内容

    • 追加:a,ab,a+,a+b

      • w:没有文件创建文件,追加新内容

      • w:有文件,追加新内容

      • 光标

  3. r+:先读,后写

  4. 其他功能:tell() seek() flush()

  5. with open() as f1:

    • 不用手动关闭

    • 可同时操作多个句柄

  6. 文件的改操作

 

posted on 2019-05-13 23:52  雨后清明  阅读(296)  评论(0编辑  收藏  举报

导航