Python如何读写字节数据


Posted in Python onAugust 05, 2020

问题

你想读写二进制文件,比如图片,声音文件等等。

解决方案

使用模式为 rb 或 wb 的 open() 函数来读取或写入二进制数据。比如:

# Read the entire file as a single byte string
with open('somefile.bin', 'rb') as f:
  data = f.read()

# Write binary data to a file
with open('somefile.bin', 'wb') as f:
  f.write(b'Hello World')

在读取二进制数据时,需要指明的是所有返回的数据都是字节字符串格式的,而不是文本字符串。 类似的,在写入的时候,必须保证参数是以字节形式对外暴露数据的对象(比如字节字符串,字节数组对象等)。

讨论

在读取二进制数据的时候,字节字符串和文本字符串的语义差异可能会导致一个潜在的陷阱。 特别需要注意的是,索引和迭代动作返回的是字节的值而不是字节字符串。比如:

>>> # Text string
>>> t = 'Hello World'
>>> t[0]
'H'
>>> for c in t:
...   print(c)
...
H
e
l
l
o
...
>>> # Byte string
>>> b = b'Hello World'
>>> b[0]
72
>>> for c in b:
...   print(c)
...
72
101
108
108
111
...
>>>

如果你想从二进制模式的文件中读取或写入文本数据,必须确保要进行解码和编码操作。比如:

with open('somefile.bin', 'rb') as f:
  data = f.read(16)
  text = data.decode('utf-8')

with open('somefile.bin', 'wb') as f:
  text = 'Hello World'
  f.write(text.encode('utf-8'))

二进制I/O还有一个鲜为人知的特性就是数组和C结构体类型能直接被写入,而不需要中间转换为自己对象。比如:

import array
nums = array.array('i', [1, 2, 3, 4])
with open('data.bin','wb') as f:
  f.write(nums)

这个适用于任何实现了被称之为”缓冲接口”的对象,这种对象会直接暴露其底层的内存缓冲区给能处理它的操作。 二进制数据的写入就是这类操作之一。

很多对象还允许通过使用文件对象的 readinto() 方法直接读取二进制数据到其底层的内存中去。比如:

>>> import array
>>> a = array.array('i', [0, 0, 0, 0, 0, 0, 0, 0])
>>> with open('data.bin', 'rb') as f:
...   f.readinto(a)
...
16
>>> a
array('i', [1, 2, 3, 4, 0, 0, 0, 0])
>>>

但是使用这种技术的时候需要格外小心,因为它通常具有平台相关性,并且可能会依赖字长和字节顺序(高位优先和低位优先)。

以上就是Python如何读写字节数据的详细内容,更多关于Python读写字节数据的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python实现递归遍历文件夹并删除文件
Apr 18 Python
python增加矩阵维度的实例讲解
Apr 04 Python
Python实现字符串的逆序 C++字符串逆序算法
May 28 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
Jul 26 Python
解决Python print输出不换行没空格的问题
Nov 14 Python
Python实例方法、类方法、静态方法的区别与作用详解
Mar 25 Python
python 求1-100之间的奇数或者偶数之和的实例
Jun 11 Python
python文本数据处理学习笔记详解
Jun 17 Python
python selenium登录豆瓣网过程解析
Aug 10 Python
Python传递参数的多种方式(小结)
Sep 18 Python
python实现在内存中读写str和二进制数据代码
Apr 24 Python
Python实现异步IO的示例
Nov 05 Python
python中Django文件上传方法详解
Aug 05 #Python
Python限制内存和CPU使用量的方法(Unix系统适用)
Aug 04 #Python
Python如何将将模块分割成多个文件
Aug 04 #Python
Python 保存加载mat格式文件的示例代码
Aug 04 #Python
python中判断文件结束符的具体方法
Aug 04 #Python
python字典key不能是可以是啥类型
Aug 04 #Python
Python延迟绑定问题原理及解决方案
Aug 04 #Python
You might like
关于时间计算的结总
2006/12/06 PHP
php新建文件自动编号的思路与实现
2011/06/27 PHP
色色整理的PHP面试题集锦
2012/03/08 PHP
PHP strip_tags保留多个HTML标签的方法
2016/05/22 PHP
PHP设计模式之抽象工厂模式实例分析
2019/03/25 PHP
jquery 将disabled的元素置为enabled的三种方法
2009/07/25 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
ECMAScript6中Set/WeakSet详解
2015/06/12 Javascript
javascript遍历json对象的key和任意js对象属性实例
2017/03/09 Javascript
Vue2.0使用过程常见的一些问题总结学习
2017/04/10 Javascript
详解Web使用webpack构建前端项目
2017/09/23 Javascript
gulp安装以及打包合并的方法教程
2017/11/19 Javascript
vue中$refs, $emit, $on, $once, $off的使用详解
2019/05/26 Javascript
JavaScript实现的联动菜单特效示例
2019/07/08 Javascript
ionic3双击返回退出应用的方法
2019/09/17 Javascript
使用Vue.set()方法实现响应式修改数组数据步骤
2019/11/09 Javascript
Python环境下搭建属于自己的pip源的教程
2016/05/05 Python
简单了解什么是神经网络
2017/12/23 Python
Python中偏函数用法示例
2018/06/07 Python
使用numpy和PIL进行简单的图像处理方法
2018/07/02 Python
Python多线程threading模块用法实例分析
2019/05/22 Python
python垃圾回收机制(GC)原理解析
2019/12/30 Python
解决Django中checkbox复选框的传值问题
2020/03/31 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
经验丰富程序员才知道的8种高级Python技巧
2020/07/27 Python
html5使用Canvas绘图的使用方法
2017/11/21 HTML / CSS
美国男士西装打折店:Jos. A. Bank
2017/11/13 全球购物
策划主管的工作职责
2013/11/24 职场文书
医学专业大学生求职的自我评价
2013/11/27 职场文书
个人党性剖析材料
2014/02/03 职场文书
怎样写好创业计划书的内容
2014/02/06 职场文书
高中生职业规划范文
2014/03/09 职场文书
法律专业自荐信
2014/06/03 职场文书
2014年销售经理工作总结
2014/12/01 职场文书
2015年度培训工作总结范文
2015/04/02 职场文书
HTML页面点击按钮关闭页面的多种方式
2022/12/24 HTML / CSS