【Python】StringIOの使用方法:文字列をファイルオブジェクトとして使用する

2021.08.08 /

【Python】StringIOの使用方法:文字列をファイルオブジェクトとして使用する

本記事ではPythonStringIO使用方法について解説していきます。

StringIOを用いると文字列をファイルオブジェクトとして使用できます。
私自身はStringIOをCSVでの文字列読み込みや、pdfminerを使用する際などで使っています。

StringIOは非常に便利なモジュールですので、本記事を通して使い方を学んでください。

StringIO

StringIOとは

StringIOを使用すると文字列をメモリにバッファ(一時的にメモリに保存すること)します。
これによりメモリに保存された文字列をファイルオブジェクトのように扱うことができます。

つまり文字列に対してファイル操作(read、write等)を行えることを意味します。

StringIOの使用方法

StringIOは標準ライブラリのioをインポートすることで使用できます。

次のように記述することで、StringIOオブジェクトを生成いたします。

import io
io_object = io.StringIO()

生成されたStringIOオブジェクトはファイルオブジェクトと同じように扱うことができます。

そのため文字列を書き込みにはwrite()メソッドを用います。
またgetvalue()メソッドで書き込んだ文字列を取得できます。

import io
io_object = io.StringIO()
io_object.write('office54')
io_object.getvalue()
# office54

使用するメソッド

StringIOで使用可能なメソッドを以下に記します。

メソッド 説明
write() 文字列を書き込む
writelines() 文字列を書き込む。引数にはリストまたはタプルを指定する
getvalue() バッファ内の文字列をすべて取得
close() StringIOオブジェクトを閉じる

StringIOの使い道

CSV文字列の読み込み

StringIOを使うことで、次のようにCSVデータの読み込みが簡単にできるようになります。

import io
import pandas
csv = """
number,name,score
1,office54,54
2,python,100
3,K-kun,50
"""
io_object = io.StringIO(csv)
csv_data = pandas.read_csv(io_object, index_col="number")
print(csv_data)

pandas.read_csvの第一引数にStringIOで生成したStringIOオブジェクトを渡すことが可能です。

わざわざファイルを作成しなくても、StringIOでメモリバッファを使うことで上記が実現できるのです。

つまりここではファイルオブジェクトの代用品としてStringIOを使っているということです。

pdfminerでPDFからテキストを取得

pdfminerでPDFからテキストを取得する際にもStringIOは活躍します。

使い方としては、pdfminerのextract_text_to_fp()の第二引数にStringIOオブジェクトを指定することで、このオブジェクトにPDFから読み取ったテキストを保存しています。

from pdfminer.high_level import extract_text_to_fp
from io import StringIO

fp = open(path, "rb")
outfp = StringIO()
extract_text_to_fp(fp, outfp)
print(outfp.getvalue().strip())

詳しい使い方は以下記事をご参照ください。

まとめ

本記事「【Python】StringIOの使用方法:文字列をファイルオブジェクトとして使用する」はいかがでしたか。

StringIOは使い方によって非常に便利なモジュールです。

本記事で紹介した使い道以外にも、様々な使い道がありますので、ぜひ探して挑戦してみてください。