python读取二进制流 Python二进制方式读写文件

发布时间:2017-03-18

来源:服务器之家

这两天用Python解析ELF二进制文件,遇到了不少问题,总结整理如下,以便加深对Python的理解。

以二进制读取文件,也就是’rb’格式读取,这个到底如何理解。

其实很简单,以’r’也就是文本读取时,比如读取一个文本文件,其中有个字符串:12345678。以’r’格式读取,那得到的就是串‘12345678’,你可以直接对这个字符串进行操作,这个方式是以用户友好的字符方式显示,你可以对其进行串连接,切片操作。

如果以‘rb’格式读取,那得到的是也是个串,只是这个串中存储的是各个字符的ASCII值。也就是说,存储的是\x31\x32\x33\x34\x35\x36\x37\x38,注意:这里是串中是没有\x的,\x只是表示这个数据是16进制。另外,也不要将31理解成3和1两个字符了,31是0x31是个整体,是一个字符,表示字符1。从这个角度来说,你可以认为它是HEX值流。因为这个串中都是16进制数,所以你要将它当成数来看,用数的操作符号去解析它。比如,将这个串赋值给strHex=’\x31\x32\x33\x34\x35\x36\x37\x38’,len(strHex)=8,注意,不是等于16,原因是显然的,\x31表示一个字符。strHex[0:1]得到的是\x31数字。ord(strHex[0:1])这样是可以的,虽然,strHex[0:1]是个数字,但是从字符的角度来说,它又是字符1,所以ord(strHex[0:1])相当于ord(‘1’),从这个角度可看出,字符和Hex值两个角度互补考虑,对理解二进制还是很有帮助的。

另外,还发现Python还提供了两个类:memoryview和bytearray。Memoryview是只读的,它允许Python代码访问内部对象的内部数据,所以显然要只读了。只是这个对象要支持buffer protocol(不知道是什么东西)。Memoryview有个元素的概念,这个元素是原子性的,由对象来操作。简单的类型如str和bytearray,其元素就是一个字节。但是第三方类型可能元素会大些。所以,可以看出,memoryview其实就是就像str一样,以元素为单位将同类元素组合在一起。只是memoryview可以以对象为参数,比如v=memoryview(‘abcdefg’),这个和字符串没什么区别,但是如果v=memoryview(obj),obj是个对象,那么就得到了对象的内存了。

Memoryview也支持切片操作,返回str类型。

所以,‘r’和‘rb’的区别在于,一个得到的是对用户友好的字符,一个得到的对程序友好的字符的Hex值,在写程序时,要从Hex值和字符两个角度共同思考。

f=open('test.bin','wb')

f.truncate()

s='\x22\x32\xdd\xfd\xab'

data=bytearray('gggggggg')

data[1:4]='\xAA\xBB\xCC'

print len(data)

b='a'

a=memoryview(b)

print a.readonly

v=memoryview('abcdefg')

f.write(s)

f.write(data)

f.close()

python读取二进制文件_python读取二进制流 Python二进制方式读写文件 - 电脑常识 - 服务器之家...相关推荐

  1. python爬取大众点评评论_python爬虫抓取数据 小试Python——爬虫抓取大众点评上的数据 - 电脑常识 - 服务器之家...

    python爬虫抓取数据 小试Python--爬虫抓取大众点评上的数据 发布时间:2017-04-07

  2. python修改悦跑圈数据_悦跑圈数据导出 悦跑圈新版本支持跑表、跑步机数据接入 - 电脑常识 - 服务器之家...

    悦跑圈数据导出 悦跑圈新版本支持跑表.跑步机数据接入 发布时间:2017-05-07 来源:服务器之家 11月11日,跑步软件悦跑圈在Appstore上线了新版本iOS1.5.4/Android 1. ...

  3. python卸载错误_卸载python后导致yum无法使用的解决办法 - Python - 服务器之家

    卸载python后导致yum无法使用的解决办法 发布时间:2014-08-03 来源:服务器之家 由于服务器需要升级python,参照了一篇坑爹的文章卸载了旧版python # 卸载旧的python ...

  4. 视频教程-快速入门Python基础教程_Python基础进阶视频-Python

    快速入门Python基础教程_Python基础进阶视频 十余年计算机技术领域从业经验,在中国电信.盛大游戏等多家五百强企业任职技术开发指导顾问,国内IT技术发展奠基人之一. 杨千锋 ¥199.00 立 ...

  5. python硬件库网址_python dev安装包 Python安装第三方库 - 硬件设备 - 服务器之家

    python dev安装包 Python安装第三方库 发布时间:2017-05-10 来源:服务器之家 Ubuntu 12.04 LTS 默认安装Python 2.7.3,没有安装python-dev ...

  6. 视频教程-快速入门Python基础教程_Python基础知识大全-Python

    快速入门Python基础教程_Python基础知识大全 十余年计算机技术领域从业经验,在中国电信.盛大游戏等多家五百强企业任职技术开发指导顾问,国内IT技术发展奠基人之一. 杨千锋 ¥99.00 立即 ...

  7. python list元素合并_Python程序中使用表达式合并List列表元素 - Python - 服务器之家...

    Python程序中使用表达式合并List列表元素 发布时间:2014-02-06 来源:服务器之家 在实现一个产品过程中,使用 Python Extension 需要一个语句将一个列表中子列表合并成为 ...

  8. python自动交易脚本_python交易库 Python自动化交易 - 网银支付 - 服务器之家

    python交易库 Python自动化交易 发布时间:2017-04-06 来源:服务器之家 大家好,今天我们来讨论一下如何用python来做一个简单的自动化交易程序. 在讨论具体的技术前,我要先声明 ...

  9. python硬件编程_树莓派c语言 设置并使用树莓派进行Python和C语言编程 - 硬件设备 - 服务器之家...

    树莓派c语言 设置并使用树莓派进行Python和C语言编程 发布时间:2017-03-01 来源:服务器之家 设置并使用树莓派进行Python和C语言编程 (下) Python部落组织翻译, 禁止转载 ...

最新文章

  1. 牛客小白月赛12 C 华华给月月出题 (积性函数,线性筛)
  2. 第十节: EF的三种追踪实体状态变化方式(DBEntityEntry、ChangeTracker、Local)
  3. 今天去看招聘会了~~
  4. 软工文档——可行性研究报告
  5. Android 外网连接解决方案
  6. React的调和过程(Reconciliation)
  7. git中ssh keys配置
  8. AtCoder Beginner Contest 164 E Two Currencies Bellman-Ford优化思想+01背包+动归dp状态转移
  9. 弱口令是什么?有哪些注意事项?
  10. mysql stuff函数_mysql   自定义 stuff
  11. QMediaplayer详解以及简易音乐播放实现
  12. keras教程_Keras教程
  13. Python求离散序列导数
  14. 201621123030《Java程序设计》第3周学习总结
  15. 在网络上共享条码打印机
  16. java 通过snmp协议获取物理机CPU、内存容量及使用率,存储的容量及使用率
  17. python如何生成随机数
  18. P4995 跳跳! java 洛谷
  19. python 二叉树遍历递归非递归_python实现二叉树递归遍历与非递归遍历
  20. 使用 Unity 和 C 开发您的首个游戏

热门文章

  1. mysql签到Android,MySQL签到设计
  2. App马甲包是什么?
  3. 从阿里巴巴IPO联想到创始人和资方关系
  4. 高端对决再现《电影帝国》3v3格斗之王战术剖析
  5. 前端做微信好友分享_基于js实现微信发送好友如何分享到朋友圈、微博
  6. 号外号外!宠粉抽奖福利来啦!赶紧看过来!
  7. 他是唯一管过4个世界500强的CEO,即将掌管这家中国万亿国企!
  8. pufei漫画网GET请求解密
  9. c语言小狗字符画,谁能帮忙做个小狗的字符画?谢谢
  10. 支付宝捐赠证书不打码安全吗?如何判断捐赠真假?