水汲み・薪割り・徒弟時代

勉強中のことを書く技術メモ。無保証。

python: テキスト整形(1)

入門2日目。

課題

readurl.py · GitHub

アウトラインエディタ向けにテキスト整形

  • クリップボードから貰ったテキストデータを、改行区切りごとにグループに分ける
  • グループの1行目以外は段下げする
    • その他の処理

実装メモ

ファイルからデータを取り込む

with open(datafile, mode="r", encoding="utf-8") as fh:
    ln = fh.readlines()
    for l in ln:
        # l=l.rstrip()
        l=l.strip()
        if re.search('^$',l):
            data.append(record)
            record = []
            continue
        record.append(l)
    if len(record) > 0:
        data.append(record)

配列のデータを分けて、2つ目以降にタブを付加

outdata = []
for record in data:
    firstline = record[0]
    restlines = record[1:]
    outrecord = []
    outrecord.append(firstline)
    for item in restlines:
        item = '\t'+item
        outrecord.append(item)
    outdata.append(outrecord)

ファイルからの読み込みと標準入力を統一的に扱う

readlines()などはファイルオブジェクトのメソッドして備わっている。ファイルも標準入力も同じ。

ファイルオブジェクトの決定部分を切り分けた。

import sys
def get_fh():
    fh = None
    if (len(sys.argv)>1):
        # ファイルの存在確認、なければ終了
        datafile = sys.argv[1]
        fh = open(datafile,mode="r",encoding="utf-8")
    else:
        fh = sys.stdin
return fh

イディオム: ライブラリ/スクリプトとして使えるようにする

スクリプトをそのまま実行したときのみ、main()が走るように設定する。

def main():
    pass
    # write as you like..

if __name__ == "__main__":
    main()

技術項目

  • str.strip() str.rstrip() 引数渡さないと空白を除去
  • re.search() 正規表現クラスメソッド
  • リスト追加 lst.append()
  • リストのスライス [x:y]
  • エスケープシーケンスは'の中でも展開される

メモ:

  • 「配列」じゃなくて「リスト」

積み残し

要調査

  • ファイルオブジェクト
  • リストと辞書の操作
  • イテレータの扱い

次の目標

  • テキスト処理をWebから行う(ターミナルの作業=だるい)
    • 認証

参考にした記事/サイト

(nop)