zoukankan      html  css  js  c++  java
  • 20190127-将一个文件拆分为多个新文件

    1.一个文件拆分成5个文件

    思路:

    1. 首先拆分成多个新文件,新的文件名需要定义,使用file_name_no来定义新文件的名字

    2. 新文件的内容要使用file_content来存储,当写入新文件后使用file_contect=''清空新文件内容

    3. 什么时候写新文件:考虑根据原始文件的内容做拆解,如将某文件拆分为5个文件,则原文件的行数除以5达到将原原件中的内容尽量平均的写入5个新文件中基于该情况,需要一个变量来统计原文件的行数,使用file_length存储原来文件的行数。然后再重新开始一行一行的读,当读取的行数达到1/5,2/5,3/5,4/5...的时候写文件

    def split_file(file_dir,file_name,num):
        import os
        import os.path
        file_name_no=1
        file_content=''
        #print(type(os.path.splitext(file_name)))
        with open(file_dir+file_name,'r',encoding='utf-8') as fp1:
            file_length=len(fp1.readlines())
            #fp1.readlines()后,游标移到文件末尾,因此使用fp1.seek(0,0)将游标移到文件开始的位置
            print(file_length)
            fp1.seek(0,0)
            #使用fp1.seek(0,0)将游标移到文件开始的位置
            file_line=0
            #使用file_line记录已经读取的行数
            for line in fp1:
                file_content+=line
                file_line+=1
                if file_line==int(file_length/num)*file_name_no and file_name_no<num:
                    #当读取的行数为达到文件内容的1/num,2/num...的时候,将文件内容写入新文件中,此写法如果文件行数/拆分个数为整数的时候刚好,否自会导致最后一个文件少内容
                    with open(file_dir+'new'+os.path.splitext(file_name)[0]+str(file_name_no)+'.txt','w',encoding='utf-8') as fp2:
                        file_name_no+=1
                        fp2.write(file_content)
                        file_content=''
            if file_content:
                #解决因文件行数不一定拆分文件的整数倍导致最后一个文件可能少内容的情况
                with open(file_dir+'new'+os.path.splitext(file_name)[0]+str(num)+'.txt','a',encoding='utf-8') as fp2:
                    fp2.write(file_content)            
    split_file('D:\Python\','b.txt',3)

     Tips:file_dir为文件的路径,file_name为文件的名称,使用os.path.splitext(file_name)[0]获取原来文件名,使用file_dir+'new'+os.path.splitext(file_name)[0]+str(file_name_no)+'.txt'拼接新文件名。当一个文件写入后,file_name_no加1,file_content清空,最后根据file_content是否为空来判断是否要将最后的内容追加写到最后一个文件中

     

     

     

  • 相关阅读:
    微信支付Native扫码支付模式二之CodeIgniter集成篇
    如何使用硬盘安装debian8.3?
    使用git将代码push到osc上
    树莓派(Raspberry Pi)搭建简单的lamp服务
    win下修改mysql默认的字符集以防止乱码出现
    CodeIgniter2.2.0-在控制器里调用load失败报错的问题
    Ubuntu Server(Ubuntu 14.04 LTS 64位)安装libgdiplus2.10.9出错问题记录
    linux下mono的安装与卸载
    asp.net中ashx生成验证码代码放在Linux(centos)主机上访问时无法显示问题
    使用NPOI将数据导出为word格式里的table
  • 原文地址:https://www.cnblogs.com/hyj691001/p/10327969.html
Copyright © 2011-2022 走看看