20190127-将一个文件拆分为多个新文件

Posted 何发奋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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清空,最后

 

 

 

以上是关于20190127-将一个文件拆分为多个新文件的主要内容,如果未能解决你的问题,请参考以下文章

VBA代码根据列的内容将excel文件拆分为多个工作簿?

将excel根据列名称拆分成多个文件

根据行值python将大型csv文件拆分为多个文件

如何将我的 QML 代码拆分为多个文件?

将一个大 XAML 拆分为多个 Sub-XAML 文件

将 JavaScript 命名空间拆分为多个文件