How to create new files?

Robert Dailey rcdailey at gmail.com
Fri Jul 13 16:56:29 CEST 2007


On Jul 13, 3:04 am, Bruno Desthuilliers <bruno.
42.desthuilli... at wtf.websiteburo.oops.com> wrote:
> Robert Dailey a écrit :
>
> > Hi,
>
> > I'm trying to create a Python equivalent of the C++ "ifstream" class,
> > with slight behavior changes.
>
> > Basically, I want to have a "filestream" object that will allow you to
> > overload the '<<' and '>>' operators to stream out and stream in data,
> > respectively. So far this is what I have:
>
> > class filestream:
>
> class Filestream(object):
>
> >    def __init__( self, filename ):
> >            self.m_file = open( filename, "rwb" )
>
> You don't need this C++ 'm_' prefix here - since the use of self is
> mandatory, it's already quite clear that it's an attribute.
>
>
>
> > #  def __del__( self ):
> > #          self.m_file.close()
>
> >    def __lshift__( self, data ):
> >            self.m_file.write( data )
>
> >    def __rshift__( self, data ):
> >            self.m_file.read( data )
>
> > So far, I've found that unlike with the C++ version of fopen(), the
> > Python 'open()' call does not create the file for you when opened
> > using the mode 'w'.
>
> It does. But you're not using 'w', but 'rw'.
>
> > I get an exception saying that the file doesn't
> > exist.
>
> Which is what happens when trying to open an inexistant file in read mode.
>
> > I expected it would create the file for me. Is there a way to
> > make open() create the file if it doesn't exist
>
> yes : open it in write mode.
>
> def __init__( self, filename ):
>      try:
>          self._file = open( filename, "rwb" )
>      except IOError:
>          # looks like filename doesn't exist
>          f = open(filename, 'w')
>          f.close()
>          self._file = open( filename, "rwb" )
>
> Or you can first test with os.path.exists:
>
> def __init__( self, filename ):
>      if not os.path.exists(filename):
>          # looks like filename doesn't exist
>          f = open(filename, 'w')
>          f.close()
>      self._file = open( filename, "rwb" )
>
> HTH

Thanks for the variable naming tips. Is it normal for Python
programmers to create class members with a _ prefixed?

I also figured out why it wasn't creating the file after I had posted,
I realized I was doing "rw" instead of just "w". Thank you for
verifying. Thanks to everyone else for your replies as well.




More information about the Python-list mailing list