はじめに
Pythonを勉強するため、東京工業大学の岡崎教授が出題されている言語処理100本ノック 2015を解いていきます。
より深く理解するため、別解や利用したライブラリの解説もまとめていきます。
環境
Python3.6
OS : mac
2章からUNIXコマンドの問題ですが、macもターミナルから利用できるようです。
問題
hightemp.txtは,日本の最高気温の記録を「都道府県」「地点」「℃」「日」のタブ区切り形式で格納したファイルである.以下の処理を行うプログラムを作成し,hightemp.txtを入力ファイルとして実行せよ.さらに,同様の処理をUNIXコマンドでも実行し,プログラムの実行結果を確認せよ.
15. 末尾のN行を出力
自然数Nをコマンドライン引数などの手段で受け取り,入力のうち末尾のN行だけを表示せよ.確認にはtailコマンドを用いよ.
解答:Python
先頭からN行を出力.py
import sys
def readlines_file(file_name):
with open(file_name, 'r') as file:
return file.readlines()
N, file_name = sys.argv[1:3]
lines = readlines_file(file_name)
print("".join(lines[-1 * int(N):]))
コマンドと出力
$ python 末尾のN行を出力.py 2 hightemp.txt
山形県 鶴岡 39.9 1978-08-03
愛知県 名古屋 39.9 1942-08-02
$ python 末尾のN行を出力.py 5 hightemp.txt
埼玉県 鳩山 39.9 1997-07-05
大阪府 豊中 39.9 1994-08-08
山梨県 大月 39.9 1990-07-19
山形県 鶴岡 39.9 1978-08-03
愛知県 名古屋 39.9 1942-08-02
解説
参考:コマンドライン引数
14. 先頭からN行を出力と同じく、sys.argv
を使用してコマンドライン引数で受け取ります。
今回はpython 実行ファイル名.py N target_file
として、引数を渡しました。
末尾を取得する場合は負の数を入れます。
print("".join(lines[-1 * int(N):]))
解答:UNIXコマンド
$ tail -n 5 hightemp.txt
埼玉県 鳩山 39.9 1997-07-05
大阪府 豊中 39.9 1994-08-08
山梨県 大月 39.9 1990-07-19
山形県 鶴岡 39.9 1978-08-03
愛知県 名古屋 39.9 1942-08-02
解説
tail
はファイルの下から数行を確認できるコマンドです。
よくlogファイルの確認の時に利用します。
デフォルトでは10行表示します。
$ tail hightemp.txt
愛媛県 宇和島 40.2 1927-07-22
山形県 酒田 40.1 1978-08-03
岐阜県 美濃 40 2007-08-16
群馬県 前橋 40 2001-07-24
千葉県 茂原 39.9 2013-08-11
埼玉県 鳩山 39.9 1997-07-05
大阪府 豊中 39.9 1994-08-08
山梨県 大月 39.9 1990-07-19
山形県 鶴岡 39.9 1978-08-03
愛知県 名古屋 39.9 1942-08-02
続いての記事
前の問題 : 14. 先頭からN行を出力
次の問題 : 16. ファイルを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