'''
合并split.py创建的目录下的所有组分文件以重建文件。
依赖文件名的排序:长度必须一致。
''' import os,sys
readsize=1024 def join(fromdir,tofile):
output=open(tofile,'wb')
parts=os.listdir(fromdir)
parts.sort()
for filename in parts:
filepath=os.path.join(fromdir,filename)
fileobj=open(filepath,'rb')
while True:
filebytes=fileobj.read(readsize)
if not filebytes:break
output.write(filebytes)
fileobj.close()
output.close() if __name__ == '__main__':
if len(sys.argv)==2 and sys.argv[1]=='-help':
print('Use:join.py [from-dir-name to-file-name]')
else:
if len(sys.argv)!=3:
interactive=True
fromdir=input('Directory containing part files?')
tofile=input('Name of file to be recreated?')
else:
interactive=False
fromdir,tofile=sys.argv[1:]
absfrom,absto=map(os.path.abspath,[fromdir,tofile])
print('Joining',absfrom,'to make',absto) try:
join(fromdir,tofile)
except:
print('Error joinning files')
print(sys.exc_info()[0],sys.exc_info()[1])
else:
print('Join complete:see',absto)
if interactive:input('Press Enter key')

  必要时,自己可能还要运行rar解压缩档案文件。

  此脚本使用os.listdir目录下的所有组分文件,然后对文件名列表排序以便将各个组分文件按正确的顺序拼装回去。然后逐字节复制。

  

  注意:

  1、此脚本是在二进制模式下处理文件,每次读取1kb的小块。也可以将单个组分文件一次性地读入:output.write(open(filepath,'rb').read()) ,但这样的弊端是它真正将文件整个一次性载入内存了。

  2、文件名排序:此方案依赖于组分文件目录中文件名的排序。它是对os.listdir返回的文件名调用了列表的sort方法,它隐式的要求创建分割文件时要有一致的长度和格式。为了满足这一要求,分割器在字符串格式化表达式中可采用零补齐数字的想法('part%04d'),以确保所有文件名在末尾的数字有着相同的位数(四位数)。排序时,较小数字前的字符零可确保组分文件正确排序并合并。或者,也可以把文件名中的数字抽出来,转换成int,然后通过列表sort方法的keys参数根据数值大小排序,

05文件合并脚本--By Mark Lutz的更多相关文章

  1. AngularJS结合RequireJS做文件合并压缩的那些坑

    我在项目使用了AngularJS框架,用RequireJS做异步模块加载(AMD),在做文件合并压缩时,遇到了一些坑,有些只是解决了,但不明白原因. 那些坑 1. build.js里面的paths必须 ...

  2. Windows上的文件合并命令

    从Linux转到Windowns后,发现很多好用的shell命令都没有了,但实际情况是Windows一样有DOS时代的命令窗口,在CLI年代用DOS的人也要干活. 比如,今天想将几个单独的sql文件整 ...

  3. RequireJS对文件合并与压缩实现方法

    RequireJS 是一个JavaScript模块加载器.它非常适合在浏览器中使用, 它非常适合在浏览器中使用,但它也可以用在其他脚本环境, 就像 Rhino and Node. 使用RequireJ ...

  4. hive小文件合并设置参数

    Hive的后端存储是HDFS,它对大文件的处理是非常高效的,如果合理配置文件系统的块大小,NameNode可以支持很大的数据量.但是在数据仓库中,越是上层的表其汇总程度就越高,数据量也就越小.而且这些 ...

  5. hadoop 文件合并

    来自:http://blog.csdn.net/dandingyy/article/details/7490046 众所周知,Hadoop对处理单个大文件比处理多个小文件更有效率,另外单个文件也非常占 ...

  6. 网络视频m3u8解密及ts文件合并

    网络视频m3u8解密及ts文件合并 参考了两篇博客: https://blog.csdn.net/weixin_41624645/article/details/95939510 https://bl ...

  7. linux shell文件合并 去重 分割

    1,合并+去重+分割 转载:shell 文件合并,去重,分割 - kakaisgood - 博客园 (cnblogs.com) 第一:两个文件的交集,并集前提条件:每个文件中不得有重复行1. 取出两个 ...

  8. CDN的combo技术能把多个资源文件合并引用,减少请求次数

    CDN的combo技术能把多个资源文件合并引用,减少请求次数.比如淘宝的写法: <link rel="stylesheet" href="//g.alicdn.co ...

  9. 用于svn添加当前目录下所有未追踪的文件,和删除所有手动删除的文件的脚本

    由于要经常用到类似与 git 中的 git add --all 这种操作,但是发现svn中并不支持类似的操作. 虽然可以使用 wildcard 进行匹配,但是 wildcard是在shell中进行匹配 ...

随机推荐

  1. caffe-ssd运行create_data.sh的时候报错:SSD from caffe.proto import caffe_pb2 ImportError: No module named caffe.proto

    在用voc2007和voc2012的数据训练基于caffe的SSD模型的时候,我们需要将图片数据转换成lmdb格式,运行脚本文件是SSD源码里面提供的create_data.sh(具体位置在$CAFF ...

  2. sqlserver 用一个表的值 更新另一个表

    update cas set cas.DocumentHeaderIdOfTransferredForForm = apply.Id from dbo.CaseTransfer cas join db ...

  3. field_automation源码分析

    field_automation主要通过uvm_field_utils_begin和uvm_field_utils_end来加到自己写的class中. uvm_field_utils_begin,在o ...

  4. java 3大特性

    1. 封装 : 定义: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口. 作用: 封装通过对属性增加修饰符来控制数据的访问权限,定义数据的访问接口,增加了数据的隐秘性和安全性. 2.继承 ...

  5. kalinux 换源

    1.系统使用第一步建议先换源,否则将出现很多未知问题 #以下两个2选1,打开要编辑的源 sudo leafpad /etc/apt/sources.list sudo gedit /etc/apt/s ...

  6. (Review cs231n) Gradient Calculation and Backward

    ---恢复内容开始--- 昨日之补充web. 求解下图的梯度的流动,反向更新参数的过程,表示为 输入与损失梯度的关系,借助链式法则,当前输入与损失之间的梯度关系为局部梯度乘以后一层的梯度. ---恢复 ...

  7. tomcat查看并修改jvm大小

    JVM--Java Virtual Machine,Java虚拟机:tomcat不是直接运行在物理操作系统上,而是运行在Java虚拟机上,通常说的配置jvm就是配置分配给Java虚拟机的内存大小: 如 ...

  8. Django框架---- 自定义分页组件

    分页的实现与使用 class Pagination(object): """ 自定义分页 """ def __init__(self,cur ...

  9. SQLServer 比like好用的函数 charindex

    比如查找用户名包含有"c"的所有用户, 可以用 use mydatabase select * from table1 where username like'%c%" ...

  10. vue 生命周期钩子的理解 watch computed

    一  理解vue的生命周期,首先需要注意几个关键字 1. el :选择器 2. $el:对应选择器的template模板(html代码) 3. render:也是vue实例中的一项,其参数更接近vue ...