言語処理100本ノック 2015の挑戦記録です。環境はUbuntu 16.04 LTS + Python 3.5.2 :: Anaconda 4.1.1 (64-bit)です。過去のノックの一覧はこちらからどうぞ。
第2章: UNIXコマンドの基礎
hightemp.txtは,日本の最高気温の記録を「都道府県」「地点」「℃」「日」のタブ区切り形式で格納したファイルである.以下の処理を行うプログラムを作成し,hightemp.txtを入力ファイルとして実行せよ.さらに,同様の処理をUNIXコマンドでも実行し,プログラムの実行結果を確認せよ.
###13.col1.txtとcol2.txtをマージ
12で作ったcol1.txtとcol2.txtを結合し,元のファイルの1列目と2列目をタブ区切りで並べたテキストファイルを作成せよ.確認にはpasteコマンドを用いよ.
出来上がったコード:
# coding: utf-8
with open('col1.txt') as col1_file, \
open('col2.txt') as col2_file, \
open('merge.txt', mode='w') as out_file:
for col1_line, col2_line in zip(col1_file, col2_file):
out_file.write(col1_line.rstrip() + '\t' + col2_line.rstrip() + '\n')
実行結果:
高知県 江川崎
埼玉県 熊谷
岐阜県 多治見
山形県 山形
山梨県 甲府
和歌山県 かつらぎ
静岡県 天竜
山梨県 勝沼
埼玉県 越谷
群馬県 館林
群馬県 上里見
愛知県 愛西
千葉県 牛久
静岡県 佐久間
愛媛県 宇和島
山形県 酒田
岐阜県 美濃
群馬県 前橋
千葉県 茂原
埼玉県 鳩山
大阪府 豊中
山梨県 大月
山形県 鶴岡
愛知県 名古屋
UNIXコマンドの確認は、シェルスクリプトで行いました。
#!/bin/sh
# マージ
paste col1.txt col2.txt > merge_test.txt
# 比較
diff --report-identical-files merge.txt merge_test.txt
実行結果:
ファイル merge.txt と merge_test.txt は同一です
無事、同じ結果になりました。
Pythonのドキュメントにおける「空白文字」とは
今回ちょっとつまづいたのは改行の除去方法です。
col1_line
やcol2_line
は行末の改行コード付きなので、これを取り除いてからタブ区切りで連結する必要があります。str.rstrip()
で引数を省略すると空白文字が除去されるという説明なのですが、この「空白文字」の定義がわかりませんでした。
Pythonのドキュメントにおける「空白文字」の原文は「whitespace」であることから、「whitespace」でちょっと調べてみました。その結果、string.whitespace
の説明やbytearray.isspace()
の説明から、次のものが該当すると考えて良さそうです。
空白文字 | コード(16進数) | 文字列リテラル |
---|---|---|
スペース | 20 | ' ' |
タブ(HT) | 09 | '\t' |
改行(LF) | 0a | '\n' |
復帰(CR) | 0d | '\r' |
改頁(FF) | 0c | '\f' |
垂直タブ(VT) | 0b | '\v' |
14本目のノックは以上です。誤りなどありましたら、ご指摘いただけますと幸いです。