将文件切割行数相等n个子文件

本文介绍了一个简单的Python脚本,用于将大型文件分割成多个较小的部分。该脚本可以根据指定的分割数量平均分配每部分的内容,最后一部分包含剩余的所有行。此工具适用于需要按行分割文件进行分布式处理或备份等场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

__author__ = 'huafeng'
#coding:utf-8
import sys
import os
def cut_file(filename, partial_count=1):
    with open(filename) as f:
        line_list = f.readlines()
        lenght_of_lines = len(line_list)
        print 'total line count: ', lenght_of_lines
        partial_file_line_count = lenght_of_lines/partial_count#共切割为partial_count文件
        for fileno in range(partial_count):
            partial_filename = filename + ".partial_%s"%(fileno + 1)#切割后的子文件由1开始编号
            if fileno == partial_count - 1:
                partial_line_list = line_list[partial_file_line_count*fileno:]#当文件行数不能被分为整数行时,将余数行写入到最后一个文件,也即:初最后一个文件外,其他文件都是partial_file_line_count行
                print 'line count of partial_%s is: '%(fileno + 1), len(partial_line_list)
            else:
                partial_line_list = line_list[partial_file_line_count*fileno:partial_file_line_count*(fileno+1)]
                print 'line count of partial_%s: '%(fileno + 1), partial_file_line_count
            with open(partial_filename, 'w') as wf:
                wf.writelines(partial_line_list)
USAGE = '''
-f, -F -filename    待切割文件
-c, -C, -count      切割数目,默认为1
'''

if __name__ == "__main__":
    args = sys.argv[1:]
    if len(args) == 4:
        if args[0] in ('-f', '-F' '-filename'):
            filename = os.path.join(args[1])
            if not filename:
                print "%s not exists"%filename
                sys.exit()
            elif args[2] in ('-c', '-C', '-count'):
                try:
                    count = int(args[3])
                    cut_file(filename, count)
                except BaseException, e:
                    print e
                    sys.exit()
        else:
            print USAGE
            sys.exit()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值