zoukankan      html  css  js  c++  java
  • 文件操作

    一、文件操作模式汇总:

          主模式:

                   r:读模式

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

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

                  x:写,必须自己创建文件,否则报错

         从模式:

                  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')

  • 相关阅读:
    5/14 补沙
    5/21 购填缝剂
    5/30 购水不漏
    6/1 购防水
    6/4 补防水
    5/21 人工
    5/7 增购电线
    6/2 补防水
    5/4 瓦工进场
    5/31 补瓷砖
  • 原文地址:https://www.cnblogs.com/yanminggang/p/10607577.html
Copyright © 2011-2022 走看看