(python)根据文件行数切割文件

一、前言

这是使用python写的根据文件行数切割文件的函数,实测速度尚可,在源文件大概200w、新文件20w的情况下测试了5个源文件,用时14s,基本满足笔者需要,因此没有继续进行优化,设想的优化思路包括使用多线程等,需要读者去完善。。

二、主要实现思路

找到源文件目录,利用一个大循环逐个向后推进。大循环内有两个小循环:
1、第一个小循环用于填充列表,使其达到新文件个数要求,一旦个数达到,则进入下一个小循环;
2、第二个小循环用于将每新文件个数的内容写入到新目录下的新文件,不满足个数则进行下一次大循环。
3、最终列表中剩下的内容写到一个新文件中。

三、实现代码

import os
import time

def cut_files(Filepath,new_Filepath,new_file_size):
    pathDir=os.listdir(Filepath)#找到文件路径
    list_ips=[]
    file_index,new_file_index=0,0
    l=len(pathDir)
    #大循环,负责向后推进文件个数
    while(file_index<l):
        #第一个小循环,负责将列表长度填充到new_file_size之上
        while(len(list_ips)<new_file_size and file_index<l):
            filepath=Filepath+pathDir[file_index]
            file_index+=1
            f=open(filepath,"r+")
            for line in f:
                list_ips.append(line[:-1])
            f.close()
        #对于此时列表,每new_file_size个内容写到一个文件中,剩余的进入下一次填充
        while(len(list_ips)>=new_file_size):
            f=open(new_Filepath+str(format(new_file_index,'05.0f'))+".txt","w")
            for ip in list_ips[0:new_file_size]:
                f.write(ip+"\n")
            f.close()
            list_ips=list_ips[new_file_size:]
            new_file_index+=1
    #最终列表中剩余的内容写到最后一个新文件中
    f=open(new_Filepath+str(format(new_file_index,'05.0f'))+".txt","w")
    for ip in list_ips:
        f.write(ip+"\n")
    f.close()
        
if __name__=="__main__":
    #源文件目录
    Filepath="F:\\拼接测试文件夹\\"
    #切割后文件存储目录
    new_Filepath="F:\\最终地址\\"
    #切割后每个文件大小
    new_file_size=200000
    t1=time.time()#计时开始
    cut_files(Filepath,new_Filepath,new_file_size)
    print("time:",time.time()-t1)#输出时间

其中输出格式使用了“format(new_file_index,‘05.0f’)”的方式,作用是使整数个数为5,小数个数为零,前面位数不够补零,使其最终达到格式化输出文件名的效果。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值