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二进制方式切分文件并还原相关推荐

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

    python读取二进制流 Python二进制方式读写文件 发布时间:2017-03-18 来源:服务器之家 这两天用Python解析ELF二进制文件,遇到了不少问题,总结整理如下,以便加深对Pytho ...

  2. python二进制方式读取文件,并将读取出的数据以txt的格式保存

    以二进制方式读取文件夹下所有二进制文件,将读取出的二进制数据转换为浮点数并以txt格式保存,代码如下: import os import struct import numpy as npdef re ...

  3. 以二进制方式打开文件并显示

    以二进制方式打开文件并显示 不管是二进制文件还是文本文件,它们都是以二进制数据的方式存储的.对于文本文件来说,它所存放的每一个字节都可以转换为一个可读的字符:而以二进制方式读取文件,只是将数据在内存中 ...

  4. python能以文本和二进制方式处理文件_使用Python进行二进制文件读写的简单方法(推荐)...

    总的感觉,python本身并没有对二进制进行支持,不过提供了一个模块来弥补,就是struct模块. python没有二进制类型,但可以存储二进制类型的数据,就是用string字符串类型来存储二进制数据 ...

  5. python能以文本和二进制方式处理文件_Python文件处理之文件写入方式与写缓存(三)...

    Python的open的写入方式有: write(str):将str写入文件 writelines(sequence of strings):写多行到文件,参数为可迭代对象 首先来看下writelin ...

  6. 把结构用二进制方式写入文件,并读出来[转]

    很简单,但是经常被问及的问题.下面的代码是C语言写的,将一个结构student用二进制的方式写入文件e:\fle.bxt中,并读取出来. #include <stdio.h> #inclu ...

  7. c语言中以追加只写方式打开文本文件,C语言文本方式和二进制方式打开文件区别...

    昨晚被@童老猪问到了两者的区别,我以前觉得自己大概搞懂了,昨晚发现还是没懂.今天查了一下资料,写下自己的理解,以备以后查阅. 我们都知道,文本文件和二进制文件在计算机上面都是以0,1存储的,那么两者怎 ...

  8. 利用Visual Studio以二进制方式打开文件

    如题 利用VS开发工具,以二进制方式打开某个文件. 点击工具栏打开文件图标,如下图所示: 在弹出的打开文件对话框中,选择想要打开的文件(test.pcm),然后点击打开右边的黑色倒三角形,并点击打开方 ...

  9. c语言以只写方式打开二进制文件,C语言采用文本方式和二进制方式打开文件的区别分析...

    稍微了解C程序设计的人都知道,文本文件和二进制文件在计算机上面都是以0,1存储的,那么两者怎么还存在差别呢?对于编程人员来说,文本文件和二进制文件就是一个声明,指明了你应该以什么方式(文本方式/二进制 ...

最新文章

  1. 自适应分辨率可扩展二层JS下拉菜单
  2. java的按钮点击事件_[转载]java处理按钮点击事件
  3. 加窗Fourier变换算法的C++实现
  4. depends用于测试程序运行所缺少的文件,可以帮我们很快找到问题
  5. 漫画算法:判断2的乘方
  6. java单例枚举_Java增强枚举的用例
  7. linux下文件合并、分割、去重
  8. php代码实现tp5监听队列,thinkPHP5的队列使用
  9. Python3系列__01Python安装
  10. in-source builds are not allowed
  11. 厉害了:tcgames电脑玩手游助手新功能强势上线,可编程游戏按键
  12. 三星s8 android9.0官方rom,三星S8+港版安卓9官方固件rom刷机包:TGY-G9550ZHU3DSD3
  13. 从零学习Belief Propagation算法(一)
  14. 强化学习: 贝尔曼方程与马尔可夫决策过程
  15. background-clip:从box-sizing:border-box属性入手,来了解盒模型
  16. 移动端适配:font-size设置方案的理解(浏览器调试移动端网页工具使用)
  17. 芯盾时代:一种会思考的新一代安全身份认证方式
  18. 止盈快回撤小但容易错过行情,怎样处理才能恰到好处?
  19. 杭电_ACM_汉诺塔VII
  20. Flutter 功能最全的JsonToDart工具(桌面Web海陆空支持)

热门文章

  1. 记忆计算机课,记忆人脑就计算机课件.ppt
  2. 互联网时代,企业薪酬管理逐渐向数智化转型
  3. java.强引用软引用,java 强引用、软引用、弱引用、虚引用-Go语言中文社区
  4. 如何使用记事本将文字转换成语音?这个简单的方法你知道吗
  5. java linearlayout_Java LinearLayout.setMinimumHeight方法代码示例
  6. 班迪(高清录制视频) 中文最新(附带工具)
  7. DSP:数字信号处理(Digital Signal Processing)
  8. WMTS(Web Map Tile Service)
  9. 有哪些好用的工作汇报工具?
  10. robotiq 夹爪ROS官方 驱动程序