Skip to content

Latest commit

 

History

History
183 lines (123 loc) · 3.58 KB

File metadata and controls

183 lines (123 loc) · 3.58 KB
Error in user YAML: (<unknown>): could not find expected ':' while scanning a simple key at line 3 column 1
---
- oeasy Python 0439
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
本教程同步发布在: 

     个人网站: `https://oeasy.org` 
     蓝桥云课: `https://www.lanqiao.cn/courses/3584` 
     GitHub: `https://github.com/overmind1980/oeasy-python-tutorial` 
     Gitee: `https://gitee.com/overmind1980/oeasypython` 
---

二进制模式

回忆

  • 上次了解了 close
    • 写了 文件之后
    • 需要 关闭文件

图片描述

  • 计算机中不都是使用二进制吗?
  • 可以用二进制的方式读写文件吗?🤔

二进制的作用

  • 这样流头就可以自由地相对运动了

图片描述

mode

  • mode 模式设置为 rb
    • r - read - 读
    • b - binary
  • 返回值变成了字节流
    • b"222\n"

图片描述

  • 二进制 和 纯文本(text)相对

  • whence

    • 除了相对于头0、
    • 相对于当前1
    • 还有一种相对于尾的模式2
  • 怎么用呢?

seek

  • whence = 2 是从尾部计算
    • -3 就是倒数第 3 个字符

图片描述

  • 返回值也是字节流

可以用二进制写么

  • 先查一下帮助
  • 判断如果要"wb"的话就会 truncate 原始文件

图片描述

  • 虽说如此危险
  • 我还是想试试

wb

  • 用二进制模式打开文件
    • 不能读

图片描述

  • 可想而知
    • 原始文件还在
    • 但里面内容已经清空
  • 二进制写的时候不能直接写字符串
    • 而需要写二进制字节流
  • 写完了
    • 我想读出来

读模式

  • 打开模式使用默认的rt
    • 读取纯文本
  • 原来的都清空了

图片描述

  • 可以看到
    • 原来的 111\n222\n333
    • 从4号位置 第一个\n
    • 开始重写
  • 写了 aaa

观察文件

图片描述

  • 读写成功

图片描述

  • 如果oeasy.txt中有非ascii字符
    • 情况会如何呢?

构建文件

图片描述

  • 细致观察

图片描述

  • 汉字使用的是
    • utf-8编码 对应的
    • 二进制状态

图片描述

  • 可以用python打开这个文件吗?

打开文件

f = open("ch.py","rb")
bytes_file = f.read()
print(bytes_file)
  • 运行结果

图片描述

  • 用什么解码呢?

解码

f = open("ch.py","rb")
bytes_file = f.read()
str_file = bytes_file.decode("utf-8")
print(str_file)
  • 运行结果

图片描述

  • 解码成功
  • 如果按照gb2312模式解码
  • 会如何呢?

错误的解码方式

f = open("ch.py","rb")
bytes_file = f.read()
str_file = bytes_file.decode("gb2312")
print(str_file)
  • 运行结果

图片描述

  • 解铃还须系铃人
  • 解码方式一定要选对
  • 默认的utf-8就很好用

总结

  • 这次我们用二进制写了文件
  • 写的时候也可以 seek 调整流文件头
  • 这二进制写(wb)和字符写(wt)好像也差不多
  • 为什么要有这么一个二进制写的方式呢?🤔
  • 下次再说 👋

  • 本文来自 oeasy Python 系统教程。
  • 想完整、扎实学 Python,
  • 搜索 oeasy 即可。