On Jul 13, 3:04 am, Bruno Desthuilliers <bruno. [EMAIL PROTECTED]> 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.
-- http://mail.python.org/mailman/listinfo/python-list