'''
需求:给一个文件,按指定的大小切割成小文件。
设计:把源文件,切割好,存到一个文件夹中。
若文件夹存在,删除文件夹内所有东西;若文件夹不存在,者创建文件夹。。用到os.path.exists 方法;
文件切割在一个函数内,循环实现。
为了能让程序方便使用,对输入参数进行了设置。
分别对 切割的文件,存放的目录,切割的大小进行设置。
'''
import sys,os
kb = 1024
mb = kb * 1000
chunsize = int(mb*1.4)
def split(fromfile=None,todir=None,chunksize=chunsize):
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
input = open(fromfile,'rb')
while True:
chunk = input.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()
input.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 = input('file to be split?')
todir = input('Directory to store part files?')
else:
interactive = False
fromfile,todir = sys.argv[1:3]
if len(sys.argv) ==4 :chunsize =int(sys.argv[3])
absfrom,absto = map(os.path.abspath,[fromfile,todir]) #使用map函数把源文件和目标文件夹路径用绝对路径表示。
print('Splitting',absfrom,'to',absto,'by',chunsize)
try:
parts = split(fromfile=fromfile,todir=todir,chunksize=chunsize)
except:
print('Error during split:')
print(sys.exc_info()[0],sys.exc_info()[1])
else:
print('Split finshed:',parts,'part are in ',absto)
if interactive:input('Press Enter key')
网友评论