- #!/usr/bin/env python3
- import os,sys,time
- chunksize=int(1024*1024)
- j = '='
- #对文件进行切割
- def split(srcfile,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
- fullsize=os.path.getsize(srcfile) #计算被切割文件的大小
- filesize=0
- f_input=open(srcfile,'rb')
- while True:
- filesize+=chunksize
- chunk=f_input.read(chunksize) #以chunksize大小从被切割文件中读取
- if not chunk:
- print('分割完成')
- break
- partnum += 1
- filename=os.path.join(todir,('part%04d' % partnum)) #标记块的编号
- fileobj=open(filename,'wb')
- fileobj.write(chunk)
- fileobj.close()
- perbar(filesize,fullsize)
- f_input.close()
- assert partnum <= 9999
- return partnum
- #计算当前切割进度
- def perbar(filesize,fullsize):
- global j
- per=int((filesize/fullsize)*100)
- sys.stdout.write('正在分割:'+('%'+str(len(j))+'s'+'%'+str((138-len(j)))+'s') %(j,'['+str(per)+'%'+']')+'\\r')
- sys.stdout.flush()
- time.sleep(0.1)
- j += '='
- if __name__ == '__main__':
- if len(sys.argv) == 2 and sys.argv[1] == '-help':
- print('usage: split-file.py [file-to-spit target-dir [chunksize]]')
- else:
- if len(sys.argv) < 3:
- interactive=True
- srcfile=input('输入分割的文件?')
- todir=input('输入分割文件的存储目录?')
- else:
- interactive=False
- scrfile,todir=sys.argv[1:3]
- if len(sys.argv) == 4:
- chunksize=int(sys.argv[3])
- absfrom,absto=map(os.path.abspath,[scrfile,todir])
- print('Splitting',absfrom,'to',absto,'by',chunksize)
- try:
- parts=split(absfrom,absto,chunksize)
- except:
- print('分割期间发生错误:')
- print(sys.exc_info()[0],sys.exc_info()[1])
- else:
- print('分割结果:',parts,'parts are in',absto)
- if interactive: input('请按enter键')
- #该片段来自于http://www.codesnippet.cn/detail/1206201614707.html
来源: http://www.codesnippet.cn/detail/1206201614707.html