Le Thu, 11 Jun 2009 10:21:31 +0100, Tim Golden <[email protected]> s'exprima ainsi:
> spir wrote: > > Hello, > > > > text = file(filename).read() > > > > (or: open(filename).read()) > > > > How do you close() the file? ;-) > > Well, in any version of Python, you can do this: > > <code> > f = open (filename) > text = f.read () > f.close () > </code> > > or, slightly more robsustly: > > <code> > f = open (filename) > try: > text = f.read () > finally: > f.close () > </code> > > But in Python 2.5+ that can be spelt: > > <code> > with open (filename) as f: > text = f.read () > </code> > > > As it happens, in CPython at the moment, the file object will > be closed when all references are released -- which would be > at the end of the line in your example. I don't know whether > that's guaranteed by the implementation, or merely the case > at present. It's certainly *not* the case in other implementations, > such as IronPython & Jython which don't use the same kind of > refcounting. Thank you, Tim, this really answers my question. My question was motivated by 2 reasons: * This "open(filename).read()" expression is very common, while there is seemingly no way to close the file. There's not even a way to check the flag file.closed, I guess! * I intended to write a helper func "filetext(filename)" to open/read/close/return (or equivalent using the with idiom). But if ever the expression above is rather safe, then there is no need for the said helper. I also thought at str methods (where the target string is a filename) .filetext() and .filebytes (the latter with file opening in 'rb' mode). Again, these methods would be useless if one can safely write "open(filename).read()". > FWIW, in non-critical code I often use the style you illustrate > above: text = open (filename).read (). But in production code, > I usually use the with statement. Right, thanks again. > TJG Denis ------ la vita e estrany _______________________________________________ Tutor maillist - [email protected] http://mail.python.org/mailman/listinfo/tutor
