一文教会你如何用 Python 分割合并大文件

2023-11-06

有时候,我们需要把一个大文件发送给别人,但是限于传输通道的限制,比如邮箱附件大小的限制,或者网络状况不太好,需要将大文件分割成小文件,分多次发送,接收端再对这些小文件进行合并。今天就来分享一下用 Python 分割合并大文件的方法。

思路及实现

如果是文本文件,可以按行数分割。无论是文本文件还是二进制文件,都可以按指定大小进行分割。

使用 Python 的文件读写功能就可以实现文件的分割与合并,设置每个文件的大小,然后读取指定大小的字节就写入一个新文件,接收端依次读取小文件,把读取到的字节按序写入一个文件,就可以完成合并。

分割

size = 1024 * 1000 * 10  # 10MB
with open("bigfile", "rb") as reader:
    part = 1
    while True:
        part_content = reader.read(size)
        if not part_content:
            print("split done.")
            break
        with open(f"bigfile_part{part}","wb") as writer:
            writer.write(part_content)

合并

total_parts = 5
with open("bigfile","wb") as writer:
    for i in range(5):
        with open(f"bigfile_part{i}", "rb") as reader:
            writer.write(reader.read())

使用第三方库

虽然可以自己写,但是别人写好了,为什么不节省点时间直接用呢?直接 pip 安装就可以了:

pip install filesplit

分割

from filesplit.split import Split
split = Split("./data.rar", "./output")
split.bysize(size = 1024*1000*10) # 每个文件最多 10MB

执行之后,我们就可以在 output 文件夹里看到分割好的文件:

你也可以按照文件行数进行分割:

split.bylinecount(linecount = 10000) # 每个文件最多 10000 行

合并

合并需要对文件夹里的小文件进行合并,该工具要求文件夹内必须有 manifest 文件,其格式如下:

filename,filesize,header
data_1.rar,10000000,False
data_2.rar,10000000,False
data_3.rar,10000000,False
data_4.rar,10000000,False
data_5.rar,1304145,False

合并文件的代码只需要指定要合并的目录,目标目录,合并后的文件名,代码如下:

from filesplit.merge import Merge
merge = Merge(inputdir = "./output", outputdir="./merge", outputfilename = "merged.rar")
merge.merge()

执行之后就可以在 merge 目录内看到合并后的文件:

 后续更多精彩内容~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一文教会你如何用 Python 分割合并大文件 的相关文章

随机推荐

  • 【踩坑】jmeter提取token,响应body中全部是token无法用正则提取

    情况是这样的 这是jmeter的响应结果 响应所有文本都是token 尝试了多次用正则提取 均无法提取全部body 经过查询资料 使用BeanShell 后置处理程序 import org json JSONObject import or
  • 【数据分析】【Pandas】(一)如何制作频率分布直方图

    文章目录 概述 1 直方图 2 密度图 概述 计算一组数据的分布有助于我们更好的了解数据构成 我们可以通过直方图或密度图 将离散的数据通过连续的方式展现出来 数据分布 频数分布 在各组按顺序排列的基础上 列出每个组的总体单位数 形成一个数列
  • nuxtjs 国际化i18n

    1 设置国际化匹配文字 locales zh json locales en json 英文同理 topbar home 首页 pin 沸点 topic 话题 book 小册 search 搜索 menu home 我的主页 label 标
  • 【计算机毕业设计】高校信息资源共享平台

    高校信息资源共享平台 21世纪的今天 随着社会的不断发展与进步 人们对于信息科学化的认识 已由低层次向高层次发展 由原来的感性认识向理性认识提高 管理工作的重要性已逐渐被人们所认识 科学化的管理 使信息存储达到准确 快速 完善 并能提高工作
  • 什么是企业用户画像,怎么构建企业用户画像

    企业画像 简单说 企业给人的印象 可以跟自然人的用户画像相类比 这其实是IT行业的一种叫法 在金融行业 一般叫做 尽职调查报告 当然 尽职调查报告只需要尽职 不需要说的太具体或者太难看 什么是企业用户画像 企业用户画像与个人用户画像有很大区
  • 反射/存储/DOM型XSS攻击原理及攻击流程详解

    文章目录 XSS漏洞原理 1 XSS分类 1 1 攻击流程 2 存储型XSS 2 1 攻击流程 3 DOM型XSS 3 1 攻击流程 XSS修复 XSS漏洞原理 XSS 跨站脚本攻击 是一种常见的 Web 安全漏洞 其允许攻击者在恶意用户的
  • 新版caffe添加自己的层(目前只学会添加,我想要添加的loss还没能实现)

    今天实现了在caffe框架中加入一个层 完成欧式距离的任务 之所以这样 是因为还没有实现自己想要的loss 只是试着学者 看能不能把添加层的流程顺下来 最后实现了 一 总体框架 1 在 src caffe proto caffe proto
  • SpringCache的介绍和使用

    1 简介 1 Spring 从 3 1 开始定义了 org springframework cache Cache和 org springframework cache CacheManager 接口来统一不同的缓存技术 并支持使用 JCa
  • 六、IP地址子网划分与VLAN

    一 IP地址的五大分类 概念 IP地址相当于人的身份证 用于在TCP IP通信协议中标记每台计算机的地址 通常用于十进制来表示 如192 168 1 100 但是在计算机内部 IP地址是一个32位的二进制数值 如11000000 10101
  • [转载]Chrome 与 Chrome OS 各版本下载集合

    Chrome OS 下载 由 Hexxeh提供的第三方编译版本 Chrome OS USB 镜像 点击这里 Chrome OS WMware 镜像 点击这里 Chrome OS Vanilla USB VMWare VirtualBox 点
  • 树的遍历-深度优先遍历和广度优先遍历

    深度优先遍历类似于树的先序遍历 假设给定初态是图中所有顶点均未被访问过 从图中某一顶点vi出发遍历图中的定义如下 首先访问出发点vi 并将其访问标志置为1 然后 从vi出发点依次搜索vi的每个邻接点vj 如vj未被访问过 则以vj为新的出发
  • 函数模板和类模板的实例化和具体化

    一 函数模板 1 显示实例化 explicit instantiation 和显示具体化 explicit specialization 的区别 1 形式上 显示实例化 template void Swap
  • estimate函数是什么?

    estimate 函数是用来估计参数值的函数 它通常用于统计学和机器学习中 用来求出一组样本数据的模型参数的最优解
  • VS2008/VS2010安装时提示VC++9.0 Runtime安装失败问题的解决方法

    查了一下 有以下几种解决方法 1 http blog csdn net zlqqhs article details 8821608 2 https dotblogs com tw johnny archive 2010 07 16 165
  • 矩阵向量求导(Matrix calculus)

    原文地址 注 不要把它和几何运算或者是向量运算混淆 前言 在数学中 矩阵微积分是进行多变量微积分的一种特殊符号 特别是在矩阵的空间上 它将关于许多变量的单个函数的各种偏导数和 或关于单个变量的多变量函数的偏导数收集到可以被视为单个实体的向量
  • linux从EMMC启动或TFTP启动的UBOOT参数

    从EMMC启动内核及设备树 setenv bootargs console ttymxc0 115200 root dev mmcblk1p2 rootwait rw setenv bootcmd mmc dev 1 fatload mmc
  • java-logback记录日志到指定文件并且压缩保存日志

    yml配置文件中加入如下配置 logging config classpath logback spring xml 项目根目录下的xml配置文件 level root info 全局日志的级别 file name mes log 输出日志
  • nvm 在 Windows 上的使用

    NVM Node Version Manager 是一个用于管理和切换多个 Node js 版本的工具 它允许你在同一台机器上同时安装和使用不同版本的 Node js 而无需手动安装和卸载 之前都是只安装一个版本的 node js 该更新时
  • 2021年字节跳动、阿里等大厂最全Android面试题,已开源

    前言 对于字节跳动的二面三面而言 Framework MVP架构 HashMap原理 性能优化 Flutter 源码分析等问题都成高频问点 然而很多的朋友在面试时却答不上或者答不全 今天在这分享下这些问点的视频解析给大家 希望对有需要的朋友
  • 一文教会你如何用 Python 分割合并大文件

    有时候 我们需要把一个大文件发送给别人 但是限于传输通道的限制 比如邮箱附件大小的限制 或者网络状况不太好 需要将大文件分割成小文件 分多次发送 接收端再对这些小文件进行合并 今天就来分享一下用 Python 分割合并大文件的方法 思路及实