'''
合并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. ES6学习之 解构赋值

    最近看了一个vue的项目,发现作者大量使用了ES6的语法,包括async, Promise, Set, Map还有一些解构赋值, 才发现自己对于ES6的语法缺乏了总结和运用,看得有点艰难,所以重新学习 ...

  2. mongodb对数组元素及内嵌文档进行增删改查操作(转)

    from:https://my.oschina.net/132722/blog/168274 比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下: &l ...

  3. tp连贯操作

    链接数据库 首先写配置文件 复制concentration.php中的 /* 数据库设置 */ 'DB_TYPE' => '', // 数据库类型 'DB_HOST' => '', // ...

  4. net npoi将List<实体>导出excel的最简单方法

    只是临时导数据用的.方便.最基本的方法, [HttpGet] [Route("ExportEnterprise")] public BaseResponse ExportEnter ...

  5. Vue系列之 => 列表动画

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. Python学习记录之----网络通信(一)

    网络通信 网络通信需要啥? OSI参考模型是啥? socket: 物理层 数据链路层.MAC地址 网络层. IP地址,好了两台机器能找到了,能连上 传输层.发数据,传数据,当然ICMP在网络层,它只是 ...

  7. SQLServer 创建自己的数据库

    1)进入数据库服务器,创建自己的数据库 use master go create database Dt_Devtest on primary(name=[Dt_new_data],filename= ...

  8. CXF框架入门(重点)

    l CXF是一个开源的webservice框架 l CXF支持的协议:SOAP.XML/HTTP等 l CXF可以很好的和spring集成 l CXF可以部署到tomcat.jboss.jetty等服 ...

  9. 找不到命令 ifconfig

    centos 7中自带的查看网络的命令是: ip addr 如果还是想要 ifconfig 安装net-tools yum install net-tools

  10. eclipse 依赖别的 工程 断点进不去

    maven Debug 发现进不了断点. 点击右键-->Properties-->Java Compiler-->Classfile Generation, 勾选上Add line  ...