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

  • 1
    いいね
  • 0
    コメント

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