zoukankan      html  css  js  c++  java
  • DAY8 文件操作(二)

    一.写

     1.1写文件

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

     1.2 文件的复制

      # 文本类型文件的复制
      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()

     1.3 with打开 

      # 用with open语法如何处理?
      # r+: 不会创建文件的可读可写 | w+:创建清空文件的可读可写 | a+:创建不清空文件(追加)的可读可写 

      # 将文件的关闭交给with管理,当with中逻辑结束后,系统会自动释放文件
      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()

     1.4 非文本文件的复制

      # 如果复制非文本类型的数据文件?
      # 从模式采用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)

    二.模式

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

      t: 文本操作(默认模式) r=>rt w=>wt a=>at
      b: 非文本文件必须采用二进制模式来处理
      +: 可读可写

      r+: 不会创建文件的可读可写 | w+:创建清空文件的可读可写 | a+:创建不清空文件(追加)的可读可写
      rb: 二进制读 | wb:创建清空文件的二进制写 | ab: 创建不清空文件(追加)的二进制写
      rb+ | wb+ | ab+

    三.游标操作

     方法:seek(偏移量, 偏移位置)
    偏移量:移动的字节数,负数是结合模式1,2往前偏移
    偏移位置:
    -- 0 - 从文件开始位置开始偏移 | 1 - 从当前游标位置开始偏移 | 2 - 从文件末尾开始偏移

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

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

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

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

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

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

     

      

  • 相关阅读:
    Mac OS Git 安装
    Android Studio Emulator 提示 “/dev/kvm is not found” 解决办法
    Intel haxm安装失败问题解决
    清空git缓存
    Android Studio使用过程中Java类突然报红,但项目可运行解决方案
    Nice Messager隐私权政策
    Android应用内 代码截屏(获取View快照)和 禁止截屏
    Android Studio生成APK自动追加版本号、自定义apk名称、指定签名证书文件
    Task-based Asynchronous Operation in WCF z
    task可声明参数 z
  • 原文地址:https://www.cnblogs.com/majingjie/p/10607633.html
Copyright © 2011-2022 走看看