stkblog

白血病と関係ないことを書きます なにかあったら教えて下さい

言語処理100本ノックやった 16

過去

steek.hatenablog.com

など

#16 ファイルをN分割する

# -*- coding: utf-8 -*-
#行数カウント (cf. #10)
fhand = open('hightemp.txt')
n_line = 0
for line in fhand:
    n_line += 1
fhand.close()
print n_line #24

N = input() #5
line_per_file = n_line/N
remainder = n_line%N
lines_per_file = [line_per_file + 1] * remainder\
                + [line_per_file] * (N-remainder)

print lines_per_file # [5, 5, 5, 5, 4]
#Nで割り切れないときはあまりを前から足してく

with open('hightemp.txt') as fhand:
    for i in xrange(N):
        filename = 'divided_0%d.txt' %i #divided_01.txt etc.
        with open(filename, 'w') as file_to_write:
            for loop in xrange(lines_per_file[i]): # loop回 行を読む→書きこむ
                line = fhand.readline()
                file_to_write.write(line.strip() + '\n')

実行するとこんな感じに
f:id:steek79:20151113133537p:plain

lines_per_file 作るところで時間かかった。この書き方でいいのかな


以上