web-dev-qa-db-ja.com

StringIOの内容をファイルに書き込む最良の方法は何ですか?

StringIOバッファの内容をファイルに書き込む最良の方法は何ですか?

私は現在次のようなことをしています:

_buf = StringIO()
fd = open ('file.xml', 'w')
# populate buf
fd.write (buf.getvalue ())
_

しかし、buf.getvalue ()は内容のコピーを作成しますか?

32
gauteh

shutil.copyfileobj を使用します。

_with open ('file.xml', 'w') as fd:
  buf.seek (0)
  shutil.copyfileobj (buf, fd)
_

またはshutil.copyfileobj (buf, fd, -1)は、制限されたサイズのチャンクを使用せずにファイルオブジェクトからコピーします(制御されていないメモリ消費を回避するために使用されます)。

54
Steven