ファイルを使っての処理

ファイルを使っての処理

ここではファイルから入力し、処理を行い、ファイルに出力するという典型的なIPOモデルを行います。

文章から会話部分のみを抜き出す

まず、次のような内容のファイルtext02.txtがあるとします。この中で会話部分、つまり”「“から”」“までを抜き出します。また”《せいきょ》“や”《めがね》“といった漢字の読みがなは必要ないので消した形にします。その内容をconv.txtに保存します。そのようなプログラムを作成してみましょう。

尚、前提条件として”「“から”」“までは改行なしで同じパラグラフであるということにします。

(注意)このプログラムは制御構造を知るため例として提示していますが、このような書き方を推奨しているわけではありません。pythonでは正規表現のマッチングを使うと非常に短く、かつ効率的に書くことができます。詳しくは正規表現reクラスのセクションを参照してください。

text02.txt

# File: text02.txt
  文壇の、或《あ》る老大家が亡《な》くなって、その告別式の終り頃から、雨が降りはじめた。早春の雨である。
  その帰り、二人の男が相合傘《あいあいがさ》で歩いている。いずれも、その逝去《せいきょ》した老大家には、お義理一ぺん、話題は、女に就《つ》いての、極《きわ》めて不きんしんな事。紋服の初老の大男は、文士。それよりずっと若いロイド眼鏡《めがね》、縞《しま》ズボンの好男子は、編集者。
「あいつも、」と文士は言う。「女が好きだったらしいな。お前も、そろそろ年貢《ねんぐ》のおさめ時じゃねえのか。やつれたぜ。」
「全部、やめるつもりでいるんです。」
  その編集者は、顔を赤くして答える。
  この文士、ひどく露骨で、下品な口をきくので、その好男子の編集者はかねがね敬遠していたのだが、きょうは自身に傘の用意が無かったので、仕方なく、文士の蛇《じゃ》の目傘《めがさ》にいれてもらい、かくは油をしぼられる結果となった。

convextract.py

# File: convextract.py
# 文章から発話部分を抜き出す。

lines=[]                        # 発話テキストを保持するリスト
with open('text02.txt',encoding='utf-8') as f:  # テキスト読み込み用としてオープン
    for l in f:
        if '「' in l :           # 行の中に'「'がある (発話がある)
            speak=''            # 発話を保持するための文字列
            for e in l:         # 行を文字単位でチェックしていく
                if e == '「':
                    speak = speak+e # 文字を加える
                    continue        # 次に進む
                if e == '」':        # 発話が終了
                    speak = speak+e
                    lines.append(speak) # リストに追加
                    speak=''            # 次のために初期化
                if speak != '':         # 発話の最中なら文字列に文字を加える
                    speak=speak + e

with open('conv.txt','w',encoding='utf-8') as f:    # 書き出しファイルをオープン
    for l in lines:             # リストの要素(発話)を1つ取り出す
        if '《' in l:            # 文字列の中に読みがながあるか
            flag=False          # あればフラグをオフにする
            for e in l:         # 一文字づつチェックする
                if e == '《':    # 読みがな開始
                    flag=True   # フラグをオン
                    continue    # スキップ
                if e == '》':    # 読みがな終了
                    flag=False  # フラグをオフ
                    continue    # スキップ
                if flag == False: # フラグが立っていない(読みがなではない)
                    f.write(e)    # ファイルに書き出し
            else:
                f.write('\n')   # 一行終わると改行を加える
        else:
            f.write(l+'\n')     # 文字列の中に読みがながなかったので書き出す

トップページ