zoukankan      html  css  js  c++  java
  • 文件、游标操作模式详解

    文件操作模式

        w:没有文件新建文件,有文件就清空文件

          w = open('1.txt', 'w', encoding='utf-8')
            w.write('000 ')
            w.flush()              #在写入大量数据,要及时处理内存空间,不然内存可能溢出导致数据丢失
            w.write('111 ')
            w.flush()              # 最后一次flush()操作可以省略
            w.writelines(['222 ', '333 '])     # 一次性写入多行
            w.write('444')
            w.write('555')
            w.close()              # 1.将内存的的数据刷新到硬盘中;2.释放文件资源

      # 需求:
        1.完成文本类型的文件复制:1.txt => 11.txt
          r = open('1.txt', 'r', encoding='utf-8')
          w = open('11.txt', 'w', encoding='utf-8')
          for line in r:              # 遍历就是一行一行读 取读文件的流
            w.write(line)
              w.flush()
              w.close()
              w.close()          # 将文件的关闭交给with管理,当with中逻辑结束后,系统会自动释放文件


        2.用with open 方式打开文件            

          with open('1.txt', 'r', encoding='utf-8') as r, open('source.txt', 'w', encoding='utf-8') as w:

          for line in r:
            w.write(line)
            w.flush()
           # w.close() 系统自动完成
              # r.close()

    各种模式总结:

          r: 读
          w: 写(无创建,有清空)
          a: 追加(有创建的功能)

          t: 文本操作(默认模式) r=>rt w=>wt a=>at
          b: 非文本文件必须采用二进制模式来处理
          +: 可读可写
          r+: 不会创建文件的可读可写 | w+:创建清空文件的可读可写 | a+:创建不清空文件(追加)的可读可写


        例:with open('1.txt', 'wt', encoding='utf-8') as f:
          f.write('666')

          # 借助读写,完成追加
            with open('1.txt', 'rt', encoding='utf-8') as f1:
             data = f1.read()
             data += '666'
            with open('1.txt', 'wt', encoding='utf-8') as f2:
           f2.write(data)

          # a为写模式,在原数据后追加写入新数据
            with open('1.txt', 'a', encoding='utf-8') as f:
            f.write('777')

    with方法完成文本文件的复制:

        # 先读后写
          with open('source.txt', 'r', encoding='utf-8') as f1,
           open('target.txt', 'a', encoding='utf-8') as f2:

      # 读取一个字节,如果是行/文件等结束标识,就返回该标识,否则返回None
            print(f1.newlines)

            first_data = f1.read(9)
            f2.write(first_data)
            f2.flush()

            second_data = f1.readline()
            f2.write(second_data)
            f2.flush()

            last_data = f1.read()
            f2.write(last_data)
            f2.flush()

            print(f1.newlines)
            data = f1.read()
             print(data)


         # 边读边写赋值
           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)

     非文本内容处理

          with open('333.mp4', 'rb') as f1:
       with open('666.mp4', 'wb+') as f2:
           for line in f1:
        f2.write(line)


    游标模式

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

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

          偏移位置:
              # -- 0 - 从文件开始位置开始偏移 | 1 - 从当前游标位置开始偏移 | 2 - 从文件末尾开始偏移

          # b'你好1234567890'

          # 游标读
              with open('source.txt', 'rb') as f:
                d1 = f.read(11)
                print(d1)
                # print(d1.decode('utf-8'))

        # 当前游标的位置
                print(f.tell())

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

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

        # 游标操作 - 从头开始
            f.seek(3, 0)
             d2 = f.read()
             # print(d2)
             # print(d2.decode('utf-8')) # 好1234567890

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

        # 案例
          with open('001.png', 'rb') as f:
          data = f.read()
          print(len(data))
  • 相关阅读:
    c# 图片保存为流Stream,再次加载时提示System.ArgumentOutOfRangeException: 要求非负数的解决办法
    VS 2019 Git failed with a fatal error的解决办法
    IIS安全狗卸载后,IIS8.5,网站无法访问的解决方法
    sqlserver 全文检索提高精确度的一个方法
    Win10应用商店打不开的解决办法
    Dapper解析嵌套的多层实体类
    Aspose.Words转换为PDF的时候字体丢失的问题解决
    IIS ASP.NET MVC 上传文件到NAS目录
    windows xp .net framework 4.0 HttpWebRequest 报The underlying connection was closed,基础连接已关闭
    c# 计算中文字节数与JAVA不符的解决方法
  • 原文地址:https://www.cnblogs.com/yuanlianghong/p/10610579.html
Copyright © 2011-2022 走看看