はじめに
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
を使います。
続いての記事
前の問題:13. col1.txtとcol2.txtをマージ
次の問題:15. 末尾のN行を出力
Python:ファイルダウンロードの進行状況とファイルサイズを表示する方法。urllib
Pythonschedule2024-02-27
【Python】tqdmでforの進捗状況を表示する
PythonColabolatoryschedule2021-02-16
学習済みの日本語単語ベクトルをColabolatoryで試してみる
自然言語処理PythonColabolatoryschedule2021-02-04
Unity ML-Agentsで新しく学習環境を作る
Unity機械学習C#PythonDeepLearningschedule2021-01-22
27. 内部リンクの除去
自然言語処理100本ノックPythonschedule2020-03-17