您的位置:首页 > 编程语言 > Python开发

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目录下会生成很多切分好的文件:



可是这些碎片文件只有进行拼接才可以使用,关于碎片文件的合并在下一章节进行介绍。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: