python 文件分割成几份

num_pieces =100 #文件分成多少份

with open('data/train.json', 'r', encoding='utf8') as f:
    single = f.read() #读取全部
    len_single = len(single)


for i in range(num_pieces):
    a = len_single // num_pieces * i
    b = len_single // num_pieces * (i + 1)
    
    print( a,":",b)
    single_ids = single[a:b] #这里取值范围 不包含b 而是b-1,因为b是下标,下标取值时是从0开始
    #
    #把分割的字符串写入一个文件
    with open('data/' + 'new_samll_split_{}.txt'.format(i), 'w', encoding='utf8') as f:
        for id in single_ids[:-1]:
            f.write(str(id))
        f.write(str(single_ids[-1]))
        f.write('\n')
    

文件长度 :文件有多少字符

i=0到要分解的份数-1

取值范围:[文件长度 // 要分解的份数 * 当前第几个分割数 : (文件长度 // 要分解的份数 * 下一个分割数)-1]

single[len_single // num_pieces * i: len_single // num_pieces * (i + 1)]

注意下标和长度的区别,下标取值时,下标是从0开始, 所以59616是长度,还要减去1才是下标的范围

不保证能完全分完,有的文件长度会有剩余分不了

例子:

文件长度:5961699

要分解的份数:100

当前第1个分割数:下标从0开始

[5961699//100*0 :  5961699//100*1]

结果

0 : 51497
51497 : 102994
102994 : 154491
154491 : 205988
205988 : 257485
257485 : 308982
308982 : 360479
360479 : 411976
411976 : 463473
463473 : 514970
514970 : 566467
566467 : 617964
617964 : 669461
669461 : 720958
720958 : 772455
772455 : 823952
823952 : 875449
875449 : 926946
926946 : 978443
978443 : 1029940
1029940 : 1081437
1081437 : 1132934
1132934 : 1184431
1184431 : 1235928
1235928 : 1287425
1287425 : 1338922
1338922 : 1390419
1390419 : 1441916
1441916 : 1493413
1493413 : 1544910
1544910 : 1596407
1596407 : 1647904
1647904 : 1699401
1699401 : 1750898
1750898 : 1802395
1802395 : 1853892
1853892 : 1905389
1905389 : 1956886
1956886 : 2008383
2008383 : 2059880
2059880 : 2111377
2111377 : 2162874
2162874 : 2214371
2214371 : 2265868
2265868 : 2317365
2317365 : 2368862
2368862 : 2420359
2420359 : 2471856
2471856 : 2523353
2523353 : 2574850
2574850 : 2626347
2626347 : 2677844
2677844 : 2729341
2729341 : 2780838
2780838 : 2832335
2832335 : 2883832
2883832 : 2935329
2935329 : 2986826
2986826 : 3038323
3038323 : 3089820
3089820 : 3141317
3141317 : 3192814
3192814 : 3244311
3244311 : 3295808
3295808 : 3347305
3347305 : 3398802
3398802 : 3450299
3450299 : 3501796
3501796 : 3553293
3553293 : 3604790
3604790 : 3656287
3656287 : 3707784
3707784 : 3759281
3759281 : 3810778
3810778 : 3862275
3862275 : 3913772
3913772 : 3965269
3965269 : 4016766
4016766 : 4068263
4068263 : 4119760
4119760 : 4171257
4171257 : 4222754
4222754 : 4274251
4274251 : 4325748
4325748 : 4377245
4377245 : 4428742
4428742 : 4480239
4480239 : 4531736
4531736 : 4583233
4583233 : 4634730
4634730 : 4686227
4686227 : 4737724
4737724 : 4789221
4789221 : 4840718
4840718 : 4892215
4892215 : 4943712
4943712 : 4995209
4995209 : 5046706
5046706 : 5098203
5098203 : 5149700

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值