schedule2018-07-19

12. 1列目をcol1.txtに,2列目をcol2.txtに保存

はじめに

言語処理100本ノック 2015

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

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

環境

Python3.6

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

問題

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

12. 1列目をcol1.txtに,2列目をcol2.txtに保存
各行の1列目だけを抜き出したものをcol1.txtに,2列目だけを抜き出したものをcol2.txtとしてファイルに保存せよ.確認にはcutコマンドを用いよ.

解答:Python

def read_file(file_name):
    with open(file_name, 'r') as file:
        return file.read()


def save_file(file_name, text):
    with open(file_name, 'w') as file:
        file.write(text)


lines = read_file('hightemp.txt').split('')

# 空行の削除
lines = list(filter(lambda line: line != '', lines))

# 指定列の取り出し
cal1 = list(map(lambda line: line.split('\t')[0], lines))
cal2 = list(map(lambda line: line.split('\t')[1], lines))

save_file('cal1.txt', "".join(cal1))
save_file('cal2.txt', "".join(cal2))

出力

cal1.txt'

高知県
埼玉県
岐阜県
山形県
山梨県
和歌山県
静岡県
山梨県
埼玉県
群馬県
群馬県
愛知県
千葉県
静岡県
愛媛県
山形県
岐阜県
群馬県
千葉県
埼玉県
大阪府
山梨県
山形県
愛知県

cal2.txt'

江川崎
熊谷
多治見
山形
甲府
かつらぎ
天竜
勝沼
越谷
館林
上里見
愛西
牛久
佐久間
宇和島
酒田
美濃
前橋
茂原
鳩山
豊中
大月
鶴岡
名古屋

解答:UNIXコマンド

$ cut -f 1 hightemp.txt > cal1.txt
$ cut -f 2 hightemp.txt > cal2.txt

出力

pythonでの出力と同じでした。

解説

cutコマンドはデフォルトでタブ区切りで列を分けているようです。

-f 列これで列を指定します。

奇数行と偶数行に分ける

はじめに問題を勘違いして、奇数行と偶数行に分ける処理を書いてしまいました。 供養のため、ここに載せておきます。

def read_file(file_name):
    with open(file_name, 'r') as file:
        return file.read()


def save_file(file_name, text):
    with open(file_name, 'w') as file:
        file.write(text)


lines = read_file('hightemp.txt').split('')

save_file('row_odd.txt', "".join(lines[::2]))
save_file('row_even.txt', "".join(lines[1::2]))

出力

row_odd.txt

高知県\t江川崎\t41\t2013-08-12
岐阜県\t多治見\t40.9\t2007-08-16
山梨県\t甲府\t40.7\t2013-08-10
静岡県\t天竜\t40.6\t1994-08-04
埼玉県\t越谷\t40.4\t2007-08-16
群馬県\t上里見\t40.3\t1998-07-04
千葉県\t牛久\t40.2\t2004-07-20
愛媛県\t宇和島\t40.2\t1927-07-22
岐阜県\t美濃\t40\t2007-08-16
千葉県\t茂原\t39.9\t2013-08-11
大阪府\t豊中\t39.9\t1994-08-08
山形県\t鶴岡\t39.9\t1978-08-03

row_even.txt

埼玉県\t熊谷\t40.9\t2007-08-16
山形県\t山形\t40.8\t1933-07-25
和歌山県\tかつらぎ\t40.6\t1994-08-08
山梨県\t勝沼\t40.5\t2013-08-10
群馬県\t館林\t40.3\t2007-08-16
愛知県\t愛西\t40.3\t1994-08-05
静岡県\t佐久間\t40.2\t2001-07-24
山形県\t酒田\t40.1\t1978-08-03
群馬県\t前橋\t40\t2001-07-24
埼玉県\t鳩山\t39.9\t1997-07-05
山梨県\t大月\t39.9\t1990-07-19
愛知県\t名古屋\t39.9\t1942-08-02

続いての記事

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

前の問題:11. タブをスペースに置換

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