Python按要求切割文件

2020-08-26  本文已影响0人  喵呜e喵星人
'''
需求:给一个文件,按指定的大小切割成小文件。
设计:把源文件,切割好,存到一个文件夹中。
     若文件夹存在,删除文件夹内所有东西;若文件夹不存在,者创建文件夹。。用到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')
上一篇下一篇

猜你喜欢

热点阅读