6.python学习笔记:切分大型文件
2016-05-18 19:03
447 查看
大型文件的切分
在shell编程中有一组操作可以切分和合并大型文件,解决了因存储过小而不能在一个设备中存储的尴尬,命令是:切分:
split -b 5m redhat6.5.iso redhat
-b 指定了每块子文件的大小 (适用于二进制文件
-l 指定了每个子文件的行数(适用于文本文件)
合并:
cat redhat* > redhat6.5.iso
如果你对shell 自带的切分合并操作不习惯,完全可以自己开发一套切分操作,我们这里命名为split.py。
split.py的内容如下所示:
#encoding:utf-8 #!/usr/bin/env python #该程序将指定的大型文件切分成n个指定的小块(块的大小也可以指定) import os import sys kilobytes = 1024 megabytes = kilobytes * 1024 chunksize = int(1.4 * megabytes) def split(fromfile, todir, chunksize=chunksize): #如果目标目录不存在则创建,否则删除原有的文件 if not os.path.exists(todir) : os.mkdir(todir) else : for fname in os.listdir(todir) : os.remove(os.path.join(todir, fname)) partnum = 0 inputfile = open(fromfile, 'rb') #开始进行切分并且创建切分文件 while True : chunk = inputfile.read(chunksize) if not chunk : break partnum += 1 filename = os.path.join(todir, ('part%04d' % partnum)) fileobj = open(filename, 'wb') fileobj.write(chunk) fileobj.close() print ("%s has been create." % (fileobj)) inputfile.close() assert partnum <= 9999 return partnum if __name__ == "__main__": #首先进行参数检测 if len(sys.argv) == 2 and sys.argv[1] == '-help' : print ('Use: split.py [file-to-split target-dir [chunksize]]') else : #用户将切分的源文件和目标地址没有进行参数传递,而是手动输入 if len(sys.argv) < 3 : interactive = true fromfile = raw_input('split file:') todir = raw_input('directory to store part file:') else : interactive = False fromfile, todir = sys.argv[1:3] #通过命令行参数传递 if len(sys.argv) == 4 : chunksize = int(sys.argv[3]) absfrom, absto = map(os.path.abspath, [fromfile, todir]) print ('Splitting ', absfrom, ' to ', absto, ' by ', chunksize) try : parts = split(fromfile, todir, chunksize) except : print ('Error during split.') print (sys.exc_info()[0], sys.exc_info()[1]) else : print ('Split finished: ', parts, " parts are in ", absto) if interactive : input('Press Enter key')
split.py的参数最多有三个:
fromfile 要切分的大文件
todir 放置切分文件的目录
chunksize 每个切分文件的大小
使用命令操作如下:
python split.py /tools/redhat-enterprise6.5x86_64.iso /haha
完了之后在/haha目录下会生成很多切分好的文件:
可是这些碎片文件只有进行拼接才可以使用,关于碎片文件的合并在下一章节进行介绍。
相关文章推荐
- Python字符串、列表、字典、元组互转
- Python之开发环境的搭建
- Python之简介
- selenium+python笔记2
- python计算时间差的方法
- Python Tricks(七)—— 使用 list 仿真先入先出的队列(FIFOQueue)
- python爬虫爬取百度贴吧的信息
- Python中list,tuple,dict用法
- Python 进阶 —— 魔法函数
- python 正则表达式(regular)
- Python处理Windows事件日志(json)
- ipython for win7 安装
- 《利用Python 进行数据分析》 - 笔记(4)
- Python第三方库整理
- python xml.etree.ElementTree解析xml文件获取节点
- python的list,tuple,dist,set和不可变对象
- 一个python发包的脚本
- Python函数
- Python2与Python3的区别(一):urllib和urllib2与urllib
- Python Tricks(六)—— 删除一个可迭代序列中等于某值的全部元素