DAY08、文件操作

一、文件操作模式汇总:

      主模式:

               r:读模式

              w:写模式(无创建,有清空)

              a:追加(有创建的功能)

     从模式:

              t:文本操作(默认模式)r >rt,w>wt,a>at

              b:非文本文件采用二进制模式来处理   (rb:二进制读 |wb:创建清空文件的二进制写 |ab:创建不清空文件(追加)的二进制写)

              +:可读可写

               r+:不会创建文件的可读可写

               w+:创建清空文件的可读可写

               a+:创建不清空文件(追加)的可读可写,在原数据后追加写入新数据

二、文件的复制:先读再写

    1、 例: r = open('source.txt', 'r', encoding='utf-8')
                 w = open('target.txt', 'w', encoding='utf-8')
                 for line in r: # 遍历就是一行一行读 取读文件的流
                      w.write(line)
                       w.flush() # 将写入到内存中的数据刷新到硬盘中
                w.close()
                r.close()

    2、用with open 处理

         # r+: 不会创建文件的可读可写 | w+:创建清空文件的可读可写 | a+:创建不清空文件(追加)的可读可写
          with open('source.txt', 'r', encoding='utf-8') as f1:
                with open('target.txt', 'a+', encoding='utf-8') as f2:
                       for line in f1:
                       f2.write(line)

3、复制非文本类型的数据文件?

      # 从模式采用b模式,不需要关心编码问题
      with open('source.mp4', 'rb') as f1:
            with open('target.mp4', 'wb+') as f2: # rb+ | wb | wb+ | ab | ab+
                  for line in f1:
                  f2.write(line)

三、游标操作:必须在b模式下操作

      方法:seek(偏移量,偏移位置)

      偏移量:移动的字节数,负数是结合模式1,2往前移

      偏移位置:0:从文件开始位置开始偏移

                       1:从当前游标位置开始偏移

                       2:从文件末尾开始偏移

        例:# 游标读

             with open('source.txt', 'rb') as f:
                    d1 = f.read(11)
                     print(d1)

              #当前游标位置

                  print(f.tell())                   

             # 游标操作 - 从末尾位置开始
                   f.seek(-3, 2)
                   d2 = f.read()
                   print(d2.decode('utf-8')) # 890

             #  游标操作 - 从当前位置开始
                   f.seek(-3, 1)
                   d2 = f.read()

             # 游标操作 - 从头开始
                      f.seek(3, 0)
                     d2 = f.read()
                      print(d2)

            # 游标写:会覆盖书写
                   with open('source.txt', 'rb+') as f:
                          f.seek(11)
                          print(f.read())

                                    f.write(b'000')

猜你喜欢

转载自www.cnblogs.com/yanminggang/p/10607577.html
今日推荐