これは自然言語処理100本ノック2020に挑んだ、とある人間の記録。
他の問題はこちら → 自然言語処理100本ノック2020から逃げるな まとめ
16. ファイルをN分割する
自然数Nをコマンドライン引数などの手段で受け取り,入力のファイルを行単位でN分割せよ.同様の処理をsplitコマンドで実現せよ.
Pythonコード
import sys path = sys.argv[1] N = int(input('N = ')) # n分割目のファイルの行の始まりを計算 def linestart(lines, n): # n分割目 * 1ファイル当たりの行数 + 端数 return n * int(len(lines) / N) + min(len(lines) % N, n) with open(path) as f: lines = f.readlines() for n in range(N): with open('output' + str(n), 'w') as w: w.write(''.join(lines[linestart(lines, n): linestart(lines, n + 1)]))
確認用UNIXコマンド
私の環境は少し特殊(fish)なので、もしかしたら動かないかも。
split -n $1 ../popular-names.txt output_unix_
$1はNの値。
実行結果
N = 3の場合。 927行、927行、926行に分割される。
長いので最初と最後のみ。
output0
Mary F 7065 1880 Anna F 2604 1880 Emma F 2003 1880 Elizabeth F 1939 1880 Minnie F 1746 1880 ... Betty F 32964 1926 Helen F 26884 1926 Margaret F 23070 1926 Ruth F 20223 1926 Doris F 16298 1926
output1
Virginia F 16162 1926 Mildred F 13551 1926 Frances F 13355 1926 Robert M 61130 1926 John M 56110 1926 ... Nicole F 15752 1972 Michael M 71405 1972 Christopher M 52189 1972 James M 47083 1972 David M 46366 1972
output2
John M 43181 1972 Robert M 43037 1972 Jason M 37446 1972 Brian M 36322 1972 William M 30529 1972 ... Benjamin M 13381 2018 Elijah M 12886 2018 Lucas M 12585 2018 Mason M 12435 2018 Logan M 12352 2018