Edited at

素人の言語処理100本ノック:13

More than 1 year has passed since last update.

言語処理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コマンドを用いよ.


出来上がったコード:


main.py

# 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')


実行結果:


merge.txt

高知県   江川崎

埼玉県 熊谷
岐阜県 多治見
山形県 山形
山梨県 甲府
和歌山県 かつらぎ
静岡県 天竜
山梨県 勝沼
埼玉県 越谷
群馬県 館林
群馬県 上里見
愛知県 愛西
千葉県 牛久
静岡県 佐久間
愛媛県 宇和島
山形県 酒田
岐阜県 美濃
群馬県 前橋
千葉県 茂原
埼玉県 鳩山
大阪府 豊中
山梨県 大月
山形県 鶴岡
愛知県 名古屋

UNIXコマンドの確認は、シェルスクリプトで行いました。


test.sh

#!/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_linecol2_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本目のノックは以上です。誤りなどありましたら、ご指摘いただけますと幸いです。