Writing to a File
Credit: Luther Blissett
Problem
You want to write text or data to a file.
Solution
Here is the most convenient way to write one big string to a file:
open('thefile.txt', 'w').write(all_the_text) # text to a text file
open('abinfile', 'wb').write(all_the_data) # data to a binary fileHowever, it is better to bind the
file object to a variable so that you can
call close on it as soon as
you’re done. For example, for a text file:
file_object = open('thefile.txt', 'w')
file_object.write(all_the_text)
file_object.close( )More often, the data you want to write is not in one big string but
in a list (or other sequence) of strings. In this case, you should
use the
writelines
method (which, despite its name, is not limited to lines and works
just as well with binary data as with text files):
file_object.writelines(list_of_text_strings)
open('abinfile', 'wb').writelines(list_of_data_strings)Calling writelines is much faster than either
joining the strings into one big string (e.g., with
''.join) and then calling
write, or calling write
repeatedly in a loop.
Discussion
To create a file object for writing, you must always pass a second
argument to
open—either
'w' to write textual data, or
'wb' to write binary data. The same considerations
illustrated in Recipe 4.2 also apply here,
except that calling close explicitly is even more advisable when you’re writing to a file rather than reading from it. Only by closing the file can you be reasonably sure that the data is actually on ...