How to create new files?

Bruno Desthuilliers bruno.42.desthuilliers at wtf.websiteburo.oops.com
Fri Jul 13 04:04:35 EDT 2007


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



More information about the Python-list mailing list