地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【Python】遅延読み込みライブラリを作ってみる

ログファイルの集計をpythonでやってるとめちゃめちゃメモリ食うので遅延読み込みを使ったりするのだが毎回書くのもアホらしいのでライブラリとして書いてみる。

yield使ってジェネレータとして実装しておけば問題なさそうなのでこんな感じ。ログ集計のたびにコピペして使おう。

def lazyread(f, delimiter):
    running = f.read(0)
    while True:
        new_data = f.read(1024)

        if not new_data:
            yield running
            return

        running += new_data
        while delimiter in running:
            curr, running = running.split(delimiter, 1)
            yield curr + delimiter

チャンクサイズで分たいケースも考慮するとこんな実装もありかもとか思ってたり。。使いながら修正していこう。

    while True:
        data = file_object.read(chunk_size)
        if not data:
            break
        yield data