Python实现大文本文件分割

开发环境

Python 2

实现效果

通过文件拖拽或文件路径输入,实现自定义大文本文件分割。

代码实现

    #coding:gbk
    import os,sys,shutil
    
    is_file_exits=False
    while not is_file_exits:
        files_list=[]
        if(len(sys.argv)==1):
            print('请输入要切割的文件完整路径:')
            files_path=raw_input().strip()
            for str_file_path in files_path.split(' '):
                if(str_file_path.strip()==''):
                    continue
                if(not os.path.exists(str_file_path.strip())):
                    print(str_file_path.strip()+'文件路径不存在,请重新输入!')
                    is_file_exits=False
                    break
                else:
                    files_list.append(str_file_path.strip());
                    is_file_exits=True
        else:
            for str_file_path in sys.argv[1:len(sys.argv)]:
                if(str_file_path.strip()==''):
                    continue
                if(not os.path.exists(str_file_path.strip())):
                    print(str_file_path.strip()+'文件路径不存在,请重新输入!')
                    is_file_exits=False
                    break
                else:
                    files_list.append(str_file_path.strip());
                    is_file_exits=True
    
    print('待切割文件:'+str(files_list))
    
    is_continue=False
    while not is_continue:
        print('请输入要切割的文件个数:')
        str_files_count=raw_input()
        if str_files_count.isdigit():
            is_continue=True
        else:
            print('请输入正确的数字!')
    
    for file_path in files_list:
    
        split_file_path=''
        total_lines_count=0
        lines_count=0
        files_count=int(str_files_count)
    
        print('正在统计文本行数.....')
    
        total_lines_count = len(open(file_path,'rU').readlines())
        print('文本总行数:'+str(total_lines_count))
    
        if files_count>total_lines_count:
            print('文本太小,不值得分割!')
            sys.exit()
    
        (filepath,filename) = os.path.split(file_path);
        (filepathname,extension) = os.path.splitext(file_path)
    
        if os.path.exists(filepathname):
            shutil.rmtree(filepathname)
            
        os.mkdir(filepathname)
            
        lines_count=int(total_lines_count/files_count)
        mod_count=total_lines_count%files_count
    
    
        print('正在进行文件分割.....')
    
        line_num=0
        file_num=0
        temp=-1
    
        for line in open(file_path,'rU').readlines():
            if file_num<mod_count:
                file_num=int(line_num/(lines_count+1))
            else:
                file_num=int((line_num-mod_count*(lines_count+1))/lines_count+mod_count)
            
            split_file_path=filepathname+'/'+str.replace(filename,extension,'_'+str(file_num)+extension)
    
            with open(split_file_path,'a+') as split_file:
                split_file.write(line)
    
            if temp!=file_num:
                print('正在生成:'+split_file_path)
            temp=file_num
    
            line_num+=1
    
        print(file_path+'分割完成!')
    
        split_file.close()
        
    os.system('pause')

源码地址:https://github.com/Angryshark128/Python.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值