[Tutor] Need help appending data to a logfile

Peter Otten __peter__ at web.de
Mon Jun 17 20:30:20 CEST 2013


Matt D wrote:

> Hey,
> I wrote some simple code to write data to a logfile and it works pretty
> well (thanks guys).  Now my problem is that every time i run the program
> the old logfile.txt is overwritten.  

The help() function in the interactive interpreter is a good tool hunt for 
help on features of functions and classes. For example:

>>> help(open)
Help on built-in function open in module __builtin__:

open(...)
    open(name[, mode[, buffering]]) -> file object
    
    Open a file using the file() type, returns a file object.  This is the
    preferred way to open a file.  See file.__doc__ for further information.

>>> help(file)
Help on class file in module __builtin__:

class file(object)
 |  file(name[, mode[, buffering]]) -> file object
 |  
 |  Open a file.  The mode can be 'r', 'w' or 'a' for reading (default),
 |  writing or appending.  The file will be created if it doesn't exist
[...]


> I need to be able to stop and start
> the program without overwriting, or losing, the old data.  here is the
> relavent code:
> 
>  #  central part of the program
>  #  lays out the GUI panel
>  #  omitted lots for our purposes here
>  Class panel(wx.Panel):
> 
>         #  open a file named "logfile.txt" in "w" writing mode.
>         #  this will create the file if it doesn't exist.
>         self.logfile = open('logfile.txt', 'w')
> 
>  # Updates the TextCtrl field values
>  # and logs TextCtrl field values
>  def update(self, field_values):
> 
>     #logger code---------------
>         #first write the CURRENT date/time
> self.logfile.write('%s,'%(str(strftime("%Y-%m-%d %H:%M:%S",
> gmtime()))))
> # loop through each of the TextCtrl objects
> for k,v in self.fields.items():
>             #get the value of the current TextCtrl field
>             f = field_values.get(k, None)
> if f:
>                 #output the value with trailing comma
>                self.logfile.write('%s,'%(str(f)))
> self.logfile.write('\n')
> #end logger code ----------------
> 
> In addition to not deleting the old data, it would be awesome to have
> some sort of wxPython widget that would give the user the ability to
> 'save as', or name and save the file, from the GUI panel.

This last request is a bit vague, and I'm not a wxPython user myself -- but 
the wx.FileSelector() function seems like a good start.

Unfortunately the documentation I found is for the underlying C++ library: 

<http://docs.wxwidgets.org/stable/wx_dialogfunctions.html#wxfileselector>

May layman's translation into wxPython:

>>> import wx
>>> app = wx.App()
>>> wx.FileSelector("Save logfile as", flags=wx.FD_SAVE)
[snip spurious warnings]
u'/foo/bar.baz' # use that result for the actual saving.




More information about the Tutor mailing list