05文件合并脚本--By Mark Lutz
'''
合并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的更多相关文章
- AngularJS结合RequireJS做文件合并压缩的那些坑
我在项目使用了AngularJS框架,用RequireJS做异步模块加载(AMD),在做文件合并压缩时,遇到了一些坑,有些只是解决了,但不明白原因. 那些坑 1. build.js里面的paths必须 ...
- Windows上的文件合并命令
从Linux转到Windowns后,发现很多好用的shell命令都没有了,但实际情况是Windows一样有DOS时代的命令窗口,在CLI年代用DOS的人也要干活. 比如,今天想将几个单独的sql文件整 ...
- RequireJS对文件合并与压缩实现方法
RequireJS 是一个JavaScript模块加载器.它非常适合在浏览器中使用, 它非常适合在浏览器中使用,但它也可以用在其他脚本环境, 就像 Rhino and Node. 使用RequireJ ...
- hive小文件合并设置参数
Hive的后端存储是HDFS,它对大文件的处理是非常高效的,如果合理配置文件系统的块大小,NameNode可以支持很大的数据量.但是在数据仓库中,越是上层的表其汇总程度就越高,数据量也就越小.而且这些 ...
- hadoop 文件合并
来自:http://blog.csdn.net/dandingyy/article/details/7490046 众所周知,Hadoop对处理单个大文件比处理多个小文件更有效率,另外单个文件也非常占 ...
- 网络视频m3u8解密及ts文件合并
网络视频m3u8解密及ts文件合并 参考了两篇博客: https://blog.csdn.net/weixin_41624645/article/details/95939510 https://bl ...
- linux shell文件合并 去重 分割
1,合并+去重+分割 转载:shell 文件合并,去重,分割 - kakaisgood - 博客园 (cnblogs.com) 第一:两个文件的交集,并集前提条件:每个文件中不得有重复行1. 取出两个 ...
- CDN的combo技术能把多个资源文件合并引用,减少请求次数
CDN的combo技术能把多个资源文件合并引用,减少请求次数.比如淘宝的写法: <link rel="stylesheet" href="//g.alicdn.co ...
- 用于svn添加当前目录下所有未追踪的文件,和删除所有手动删除的文件的脚本
由于要经常用到类似与 git 中的 git add --all 这种操作,但是发现svn中并不支持类似的操作. 虽然可以使用 wildcard 进行匹配,但是 wildcard是在shell中进行匹配 ...
随机推荐
- 导入转储文件的时候:Error Code: 1406. Data too long for column - MySQL
MySQL will truncate any insert value that exceeds the specified column width. to make this without e ...
- node.js中express模块创建服务器和http模块客户端发请求
首先下载express模块,命令行输入 npm install express 1.node.js中express模块创建服务端 在js代码同文件位置新建一个文件夹(www_root),里面存放网页文 ...
- 11.match
(我对部分段落进行翻译) A match statement is used to branch execution of a program. It’s the equivalent of the ...
- STL之Deque容器
1.Deque容器 1)deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的. 2)deque在接口上和vect ...
- Mybatis Generator 使用com.mysql.cj.jdbc.Driver遇到的问题
Mybatis Generator 使用com.mysql.cj.jdbc.Driver遇到的问题 今天闲来无事,准备搭一套SSM的环境,当然所有的jar包都用最新的. Mybatis使用3.4.6, ...
- 【转】SQL Server 运行状况监控SQL语句
SQL Server 运行状况监控SQL语句 Microsoft SQL Server 2005 提供了一些工具来监控数据库.方法之一是动态管理视图.动态管理视图 (DMV) 和动态管理函数 (D ...
- Spark学习之路 (二十八)分布式图计算系统
一.引言 在了解GraphX之前,需要先了解关于通用的分布式图计算框架的两个常见问题:图存储模式和图计算模式. 二.图存储模式 巨型图的存储总体上有边分割和点分割两种存储方式.2013年,GraphL ...
- redis的数据类型命令
存储sortedset: 存储:zadd key score menber1 score menber2 ... 升序排列:zrange key start end [withscores] 降序排列 ...
- Vim 文本编辑器的基本使用
Vim文本编辑器是Linux/Unix系统下最常用的工具之一,通过该工具可以很方便的建立.修改.编辑文档或者程序文件,其作用类似与windows系统下的记事本或者notepad++,因此熟练掌握该工具 ...
- Spring Batch 远程分区和远程分块的区别
Partitioning is a master/slave step configuration that allows for partitions of data to be processed ...