Python小记--二进制方式文件读写实践

来源:互联网 发布:淘宝能买到a碟吗 编辑:程序博客网 时间:2024/06/06 02:20

二进制文件读写探究

昨天的文件读写简洁方案使用了with语法代替try…except….finally进行文本文件读写,今天补充一下读写二进制文件内容。
其实所有文件都可以当做二进制文件来处理,至于为什么会有文本文件和二进制文件的说法,个人认为是为了进行逻辑上的区分吧~这个今天先不去探究。
我选取了两种文件类型,.docx和.jpg来进行测试:

.docx格式:

word其中包含了文字和图片,模仿昨天代码,复制一个docx文件如下:

with open('file/python.docx', 'rb') as f:    with open('file/pythonCopy.docx', 'wb') as w:        for line in f.readlines():            w.write(line.strip())print('done.')

经测试,控制台打印了”done.”,说明程序并没有报错并且成功执行完毕。
但是当我尝试打开pythonCopy.docx文件时,却报出以下错误:

可恶的错误

随后我比较了一下两个文件的大小,发现都是一样的31kb,并且我想由于采用的二进制方式读取和写入,就不应该存在文件编码的问题。于是再次思考程序的执行过程:

  1. 读取文件,正常;
  2. 创建输出流,没有报错所以也应该是正常的;
  3. 写入新文件,文件大小一致,所以写入的数据应该是没错的,但是写入方式呢?不懂所以回头检查一遍!

于是发现了一个问题,我的写入语句如下:

w.write(line.strip())

猛然发现在这里我调用了strip()方法,这个方法作用是去除字符串首尾的空格,类似java中的trim()方法,问题很可能就出在这里!二进制数据被篡改导致文件损坏!
去掉一试,大功告成!

.jpg文件

要说二进制文件,图片和视频才是货真价实毫无争议的二进制文件,此处不应有大问题,代码如下:

with open('file/python.jpg', 'rb') as f:    with open('file/pythonCopy.jpg', 'wb') as w:        for line in f.readlines():            w.write(line)print('done.')

此次完美复制!

踏平一切坑!2017年8月15日20:39:43 于辉煌时代


原创粉丝点击