writelines puzzle

Dave Angel d at davea.name
Wed Aug 22 15:28:28 EDT 2012


On 08/22/2012 02:00 PM, William R. Wing (Bill Wing) wrote:
> On Aug 22, 2012, at 12:48 PM, Chris Kaynor <ckaynor at zindagigames.com> wrote:
>
>> 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.
>>
> Sorry, I should have been more explicit.  The value of "i" in this instance is 2354, so the file should (I thought) have contained the value of "i" followed by 2 x 2354 values of the data.
>
>> 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").
>>
> No, I really do want 'w'.  In the final package, this will be invoked once at the end of the month, before the log file is compressed and rolled.
>
> [big snip]
>
>>> Much to my surprise, when I looked at the output file, it only contained 160 characters [instead of ~2700 multi-character data values].  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]
>>>
> Please look at what cat found in the file.  First there is the value of "i" as expected.  This is then followed by the first 3 values of the time stamp x-data, then a comma, an ellipsis, another comma, and the last three data values.  That patten (3 values, an ellipsis, and 3 final values) is repeated again for the y-data array/list.  It is almost as though "writelines" had written an editorial summary of the data rather than the data.

This problem has nothing to do with writelines().  You pass writelines()
a simple string, it writes it to the file. writelines() normally EXPECTS
a list, but you convert it with the str() function.  So it iterates
through the characters, rather than through the elements of a list.

Clearly, the value x_data  is not a list either, as you claimed in your
original message.   Calling str() on a list would have produced a single
string representing a list, and assuming the elements are floats, it'd
look pretty much what you had except for the ellipses.  Is that really
what you wanted?  If so, i'd fix the code that produced a non-list for
that value (and similarly for y_rtt).

On the other hand, perhaps you expected the values to be one or two per
line, judging from your use of the writelines() function.

I suspect you have a numpy array or similar object, not a list.  So
confirm what you've actually got, and what you want/expect the output to
look like, and somebody will (or already has) help out.



-- 

DaveA




More information about the Python-list mailing list