• 十九、文件的操作


    一、今日内容大纲

    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:UsersoldboyDesktop主妇空姐模特联系方式.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()
      #结果:['反反复复 ', '实实在在 ', '多多少少 ', '千千万万 ', '染发广播 ']
      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')
      # ['反反复复 ', '实实在在 ', '多多少少 ', '千千万万 ', '染发广播 ']
      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() ['第一行 ','第二行 ']

        • 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. 文件的改操作

  • 相关阅读:
    jqueryeasyui中创建复杂布局
    内表查询用到外表
    某人对为什么不搞.net,不搞web的原因
    眼睛痛的一些原因
    控件包含代码块(即 <% ... %>),因此无法修改控件集合(用户自定义控件中)
    明天留着看
    SqlServer 数据归档
    从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。
    生成sql 脚本没有索引
    sqlserver 时间间隔
  • 原文地址:https://www.cnblogs.com/yangzm/p/10859832.html
Copyright © 2020-2023  润新知