schedule2018-07-19

14. 先頭からN行を出力

はじめに

言語処理100本ノック 2015

Pythonを勉強するため、東京工業大学の岡崎教授が出題されている言語処理100本ノック 2015を解いていきます。

より深く理解するため、別解や利用したライブラリの解説もまとめていきます。

環境

Python3.6

OS : mac
2章からUNIXコマンドの問題ですが、macもターミナルから利用できるようです。

問題

hightemp.txtは,日本の最高気温の記録を「都道府県」「地点」「℃」「日」のタブ区切り形式で格納したファイルである.以下の処理を行うプログラムを作成し,hightemp.txtを入力ファイルとして実行せよ.さらに,同様の処理をUNIXコマンドでも実行し,プログラムの実行結果を確認せよ.

14. 先頭からN行を出力
自然数Nをコマンドライン引数などの手段で受け取り,入力のうち先頭のN行だけを表示せよ.確認にはheadコマンドを用いよ

解答:Python

先頭からN行を出力.py

import sys


def readlines_file(file_name):
    with open(file_name, 'r') as file:
        return file.readlines()

# 引数の受け取り
N = sys.argv[1]
file_name = sys.argv[2]]

lines = readlines_file(file_name)

print("".join(lines[:int(N)]))

コマンドと出力

$ python 先頭からN行を出力.py 1 hightemp.txt
高知県  江川崎  41      2013-08-12

$ python 先頭からN行を出力.py 5 hightemp.txt
高知県  江川崎  41      2013-08-12
埼玉県  熊谷    40.9    2007-08-16
岐阜県  多治見  40.9    2007-08-16
山形県  山形    40.8    1933-07-25
山梨県  甲府    40.7    2013-08-10

解説

参考:コマンドライン引数

コマンドライン引数で受け取るには、sys.argvを使用します。

python ファイル名.py 引数1 引数2

実行した場合、argv = ['実行ファイル名.py', '引数1', '引数2']と受け取ります。

今回はpython 実行ファイル名.py N target_fileとして、引数を渡しました。

解答:UNIXコマンド

$ head -n 5 hightemp.txt
高知県  江川崎  41      2013-08-12
埼玉県  熊谷    40.9    2007-08-16
岐阜県  多治見  40.9    2007-08-16
山形県  山形    40.8    1933-07-25
山梨県  甲府    40.7    2013-08-10

解説

headはファイルの上から数行を確認できるコマンドです。

デフォルトでは10行表示します。

$ head hightemp.txt
高知県  江川崎  41      2013-08-12
埼玉県  熊谷    40.9    2007-08-16
岐阜県  多治見  40.9    2007-08-16
山形県  山形    40.8    1933-07-25
山梨県  甲府    40.7    2013-08-10
和歌山県        かつらぎ        40.6    1994-08-08
静岡県  天竜    40.6    1994-08-04
山梨県  勝沼    40.5    2013-08-10
埼玉県  越谷    40.4    2007-08-16
群馬県  館林    40.3    2007-08-16

行数を指定する場合は、-nを使います。


続いての記事

Python3で言語処理100本ノックまとめ

前の問題:13. col1.txtとcol2.txtをマージ

次の問題:15. 末尾のN行を出力