Search code examples
pythonfile-iostringio

What is the best way to write the contents of a StringIO to a file?


What is the best way to write the contents of a StringIO buffer to a file ?

I currently do something like:

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

But then buf.getvalue() would make a copy of the contents?


Solution

  • Use shutil.copyfileobj:

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

    or shutil.copyfileobj(buf, fd, -1) to copy from a file object without using chunks of limited size (used to avoid uncontrolled memory consumption).