8.24.2013

Python: Helper Function for Text Processing

Python: テキスト処理のためのヘルパー関数

AWKのようなテキスト処理に特化した作業を Python で楽に行うための関数を作った。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Helper function for text stream processing
"""

import sys


def process(function):
    paths = (sys.argv + [None])[1:max(2, len(sys.argv))]
    for path in paths:
        try:
            fp = sys.stdin if path is None else open(path)
            for line in fp:
                function(line.rstrip("\n"))
        except (KeyboardInterrupt, EOFError):
            pass
        except Exception:
            exc_type, exc = sys.exc_info()[:2]
            print('%s: %s: %s' % (sys.argv[0], exc_type.__name__, exc))

コマンドライン引数が指定されない場合は標準入力から、指定された場合はそれぞれの引数をファイルパスと
見なして全ての入力を順に1行ずつ読み込み、何らかの処理を行う。

process 関数の引数にはパラメータを1個取る関数を渡す。
そのパラメータには、読み込まれた入力が1行ずつ、末尾の改行が除去された文字列として渡される。 

 

利用例

入力をそのまま標準出力へ出力するだけの処理

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import textprocessor


def identity(line):
    print(line)


if __name__ == '__main__':
    textprocessor.process(identity)

 

実行例
    • 準備したファイル
line1
line2

 

  • 標準入力から流し込む

 

$ cat ./test.txt | ./identity.py
line1
line2

 

  • ファイルパスを指定して実行

 

$ ./identity.py ./test.txt
line1
line2

 

  • 複数のファイルを指定して実行

 

$ ./identity.py ./test.txt ./test.txt
line1
line2
line1
line2

 

  • エラーケース

 

$ ./identity.py xxxxxx
./identity.py: IOError: [Errno 2] No such file or directory: 'xxxxxx'

 

Related Posts

0 件のコメント:

コメントを投稿