writelines puzzle

Chris Kaynor ckaynor at zindagigames.com
Wed Aug 22 12:48:41 EDT 2012


Reading your post, I do not see for sure what your actual issue is, so
I am taking my best guess: that the file does not contain as much data
as would be expected.

On Wed, Aug 22, 2012 at 8:38 AM, William R. Wing (Bill Wing)
<wrw at mac.com> wrote:
> In the middle of a longer program that reads and plots data from a log file, I have added the following five lines (rtt_data is fully qualified file name):
>
> wd = open(rtt_data, 'w')

Here, you are opening the data for write ("w"), which will replace the
contents of the file each time the file is opened. I am guessing you
want append ("a").

> stat = wd.write(str(i))
> stat = wd.writelines(str(x_dates[:i]))
> stat = wd.writelines(str(y_rtt[:i]))
> wd.close()

Also, rather than opening the file, writing to it, then closing it
manually, you would be better off using the with statement (presuming
Python 2.5+), like so:

with open(rtt_data, 'w') as wd:
    wd.write(str(i))
    wd.writelines(str(x_dates[:i]))
    wd.writelines(str(y_rtt[:i]))

In this case, you can be absolutely certain that the file will be
closed at the end, even if one of the commands in the middle fails.
The way you had it written, if one of the write/writeline, or any of
the formatting, fails, the file would be left open for an
indeterminate amount of time (the wd variable may be kept around as
part of the exception, preventing it from being garbage collected and
thus closed). Not a big deal, but more important if you are doing more
work with the file open.

>
> The value of i is unknown before I have read through the input log file, but is typically in the neighborhood of 2500.  x_dates is a list of time stamps from the date2num method, that is values of the form 734716.72445602, day number plus decimal fraction of a day.  y_rtt is a list of three- or four-digit floating point numbers.  The x_dates and y_rtt lists are complete and plot correctly using matplotlib.  Reading and parsing the input log file and extracting the data I need is time consuming, so I decided to save the data for further analysis without the overhead of reading and parsing it every time.
>
> Much to my surprise, when I looked at the output file, it only contained 160 characters.  Catting produces:
>
> StraylightPro:Logs wrw$ cat RTT_monitor.dat
> 2354[ 734716.72185185  734716.72233796  734716.72445602 ...,  734737.4440162
>   734737.45097222  734737.45766204][ 240.    28.5   73.3 ...,   28.4   27.4   26.4]
>
> Clearly I'm missing something fundamental about using the writelines method, and I'm sure it will be a DUH moment for me, but I'd sure appreciate someone telling me how to get that data all written out.  I certainly don't insist on writelines, but I would like the file to be human-readable.
>
> Python 2.7.3
> OS-X 10.8
>
> Thanks,
> Bill
> --
> http://mail.python.org/mailman/listinfo/python-list



More information about the Python-list mailing list