Python二进制方式切分文件并还原
Python二进制方式均等切分文件并且合并还原
- 场景
- 切分原理图
- 代码实现
- 切分方式(图左)
- 切分方式(图右)
场景
- 文件传输大小限制时,需要将文件切小,分别发送,合并还原
- 文件发送限制(比如:破解软件、小电影…)
切分原理图
代码实现
切分方式(图左)
# 源文件名
SOURCE = 'scala-intellij-bin-2020.3.1.zip'
# 切成多少个文件,奇数
N = 9
# 还原文件的路径
restore = 'restore_' + SOURCEdef rb(abs_path):"""二进制方式读取文件"""with open(abs_path, 'rb') as f:return f.read()def wb(abs_path, s):"""二进制方式写文件"""with open(abs_path, 'wb') as f:f.write(s)def split():"""文件切分"""frb = rb(SOURCE)each = int(len(frb) // N) + 1for i in range(N):wb(str(i), frb[i * each: (i + 1) * each])def combine():"""合并分片,还原文件"""with open(restore, 'wb') as f:for i in range(N):f.write(rb(str(i)))if __name__ == '__main__':split()combine()
切分方式(图右)
import os# 源文件名
SOURCE = '待切文件'
# 切成多少个文件,奇数
N = 9# 路径设置
path = os.path.dirname(__file__)
# 源文件绝对路径
source = os.path.join(path, SOURCE)
# 源文件切分后,存到此文件夹
fragment = os.path.join(path, 'fragment/')
if not os.path.exists(fragment):os.mkdir(fragment)
# 还原文件的绝对路径
restore = os.path.join(fragment, SOURCE)def rb(abs_path):"""二进制方式读取文件"""with open(abs_path, 'rb') as f:return f.read()def split():"""文件切分"""frb = rb(source)f_ls = [open(os.path.join(fragment, str(i)), 'wb') for i in range(N)]for i in range(len(frb)):if i % 2 == 0:f_ls[i % N].write(frb[i: i + 2])for f in f_ls:f.close()def combine():"""合并分片,还原文件"""f = open(restore, 'wb')fb_ls = [rb(os.path.join(fragment, str(i))) for i in range(N)]le = sum(len(frb) for frb in fb_ls)for i in range(le):if i % 2 == 0:f.write(fb_ls[i % N][int(((i / 2) // N) * 2): int(((i / 2) // N) * 2) + 2])f.close()def checkout():"""计算还原率"""o = rb(source)t = sum(i == j for i, j in zip(rb(restore), o))print('还原率', t / len(o))if __name__ == '__main__':split()combine()checkout()
Python二进制方式切分文件并还原相关推荐
- python读取二进制文件_python读取二进制流 Python二进制方式读写文件 - 电脑常识 - 服务器之家...
python读取二进制流 Python二进制方式读写文件 发布时间:2017-03-18 来源:服务器之家 这两天用Python解析ELF二进制文件,遇到了不少问题,总结整理如下,以便加深对Pytho ...
- python二进制方式读取文件,并将读取出的数据以txt的格式保存
以二进制方式读取文件夹下所有二进制文件,将读取出的二进制数据转换为浮点数并以txt格式保存,代码如下: import os import struct import numpy as npdef re ...
- 以二进制方式打开文件并显示
以二进制方式打开文件并显示 不管是二进制文件还是文本文件,它们都是以二进制数据的方式存储的.对于文本文件来说,它所存放的每一个字节都可以转换为一个可读的字符:而以二进制方式读取文件,只是将数据在内存中 ...
- python能以文本和二进制方式处理文件_使用Python进行二进制文件读写的简单方法(推荐)...
总的感觉,python本身并没有对二进制进行支持,不过提供了一个模块来弥补,就是struct模块. python没有二进制类型,但可以存储二进制类型的数据,就是用string字符串类型来存储二进制数据 ...
- python能以文本和二进制方式处理文件_Python文件处理之文件写入方式与写缓存(三)...
Python的open的写入方式有: write(str):将str写入文件 writelines(sequence of strings):写多行到文件,参数为可迭代对象 首先来看下writelin ...
- 把结构用二进制方式写入文件,并读出来[转]
很简单,但是经常被问及的问题.下面的代码是C语言写的,将一个结构student用二进制的方式写入文件e:\fle.bxt中,并读取出来. #include <stdio.h> #inclu ...
- c语言中以追加只写方式打开文本文件,C语言文本方式和二进制方式打开文件区别...
昨晚被@童老猪问到了两者的区别,我以前觉得自己大概搞懂了,昨晚发现还是没懂.今天查了一下资料,写下自己的理解,以备以后查阅. 我们都知道,文本文件和二进制文件在计算机上面都是以0,1存储的,那么两者怎 ...
- 利用Visual Studio以二进制方式打开文件
如题 利用VS开发工具,以二进制方式打开某个文件. 点击工具栏打开文件图标,如下图所示: 在弹出的打开文件对话框中,选择想要打开的文件(test.pcm),然后点击打开右边的黑色倒三角形,并点击打开方 ...
- c语言以只写方式打开二进制文件,C语言采用文本方式和二进制方式打开文件的区别分析...
稍微了解C程序设计的人都知道,文本文件和二进制文件在计算机上面都是以0,1存储的,那么两者怎么还存在差别呢?对于编程人员来说,文本文件和二进制文件就是一个声明,指明了你应该以什么方式(文本方式/二进制 ...
最新文章
- 自适应分辨率可扩展二层JS下拉菜单
- java的按钮点击事件_[转载]java处理按钮点击事件
- 加窗Fourier变换算法的C++实现
- depends用于测试程序运行所缺少的文件,可以帮我们很快找到问题
- 漫画算法:判断2的乘方
- java单例枚举_Java增强枚举的用例
- linux下文件合并、分割、去重
- php代码实现tp5监听队列,thinkPHP5的队列使用
- Python3系列__01Python安装
- in-source builds are not allowed
- 厉害了:tcgames电脑玩手游助手新功能强势上线,可编程游戏按键
- 三星s8 android9.0官方rom,三星S8+港版安卓9官方固件rom刷机包:TGY-G9550ZHU3DSD3
- 从零学习Belief Propagation算法(一)
- 强化学习: 贝尔曼方程与马尔可夫决策过程
- background-clip:从box-sizing:border-box属性入手,来了解盒模型
- 移动端适配:font-size设置方案的理解(浏览器调试移动端网页工具使用)
- 芯盾时代:一种会思考的新一代安全身份认证方式
- 止盈快回撤小但容易错过行情,怎样处理才能恰到好处?
- 杭电_ACM_汉诺塔VII
- Flutter 功能最全的JsonToDart工具(桌面Web海陆空支持)
热门文章
- 记忆计算机课,记忆人脑就计算机课件.ppt
- 互联网时代,企业薪酬管理逐渐向数智化转型
- java.强引用软引用,java 强引用、软引用、弱引用、虚引用-Go语言中文社区
- 如何使用记事本将文字转换成语音?这个简单的方法你知道吗
- java linearlayout_Java LinearLayout.setMinimumHeight方法代码示例
- 班迪(高清录制视频) 中文最新(附带工具)
- DSP:数字信号处理(Digital Signal Processing)
- WMTS(Web Map Tile Service)
- 有哪些好用的工作汇报工具?
- robotiq 夹爪ROS官方 驱动程序