👩💻
言語処理100本ノック 2020 (Rev 2) 第2章: UNIXコマンド 16. ファイルをN分割する
問題
16. ファイルをN分割する
自然数Nをコマンドライン引数などの手段で受け取り,入力のファイルを行単位でN分割せよ.同様の処理をsplitコマンドで実現せよ.
solution16.py
import sys
import pandas as pd
if len(sys.argv) == 1:
print('Set arg n, like "python chapter02/solution16.py 5"')
else:
n = int(sys.argv[1])
df = pd.read_csv('chapter02/popular-names.txt', sep='\t', header=None)
nrow = -(-len(df) // n)
for i in range(n):
df.iloc[nrow * i:nrow * (i + 1)].to_csv(f'chapter02/solution16/solution16_{i}', sep='\t', index=False, header=None)
solution16_0.txt
Mary F 7065 1880
Anna F 2604 1880
Emma F 2003 1880
Elizabeth F 1939 1880
Minnie F 1746 1880
#以下に続きます
solution16_1.txt〜solution16_4.txtまでの5つのファイルを取得できました。
solution16.sh
split -n $1 -d popular-names.txt solution16_sh/solution16_sh_
solution16_sh_00.txt
Mary F 7065 1880
Anna F 2604 1880
Emma F 2003 1880
Elizabeth F 1939 1880
Minnie F 1746 1880
#以下に続きます
こちらもsolution16_sh_01.txt〜solution16_sh_04.txtまでの5つのファイルを取得できました。
この問題では、「14. 先頭からN行を出力」に加えて、X
行のファイルをN分割するためにN
個のファイルの行数を考えます。今回は-
(マイナス)を使うことで繰り上げ処理を行っています。
df.iloc[ ]
を使用すると、行番号や列番号で行や列の抽出を行うことができます。
Discussion