[Python-ideas] file(fn).read()

spir denis.spir at free.fr
Sat Jun 13 10:25:19 CEST 2009


Hello,

this post is half a question, half a proposal.

Q: what happens to the filesystem file, and to the python file object below?

    text = file(fn).read()

(used 'file' instead of 'open' in purpose)
Note that there seemingly is no way to close or del the file object, nor even to check its 'closed' flag.
I would expect that, in the case a file remains unnnamed, it is automatically closed and del-ed. If not, do you think it is sensible to ensure that?


In this case, we have a both safe and compact idiom to read file content. I consider this good, because the concept of "read file content" is both a single and simple operation -- and rather common.
Else, I would propose a pair of string methods (rather than 2 more builtin funcs) .filetext() & .filebytes(). In both cases, the target string is (supposed to be) a filename.
Below an example.

===================
class FString(str):
    ''' custom string implementing file content reading
        '''
    TEXT_MODE = 'r'
    BYTES_MODE = 'rb'
    NO_FILE_MESSAGE = 'Cannot open file "%s".'
    def filetext(self):
        return self._filecontent(FString.TEXT_MODE)
    def filebytes(self):
        return self._filecontent(FString.BYTES_MODE)
    def _filecontent(self, mode):
        try:
            f = open(self, mode)
        except IOError,e:
            raise ValueError(FString.NO_FILE_MESSAGE % self)
        bytes = f.read()
        f.close()
        return bytes
===================
>>> from FString import FString
>>> fn = FString("test.txt")
>>> fn.filetext()
'foo\nbar\n'
>>> fn.filebytes()
'foo\nbar\n'
>>> fn = FString("fool.txt")
>>> fn.filetext()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "FString.py", line 12, in filetext
    raise ValueError(NO_FILE_MESSAGE % fn)
ValueError: Cannot open file "fool.txt".
===================

I take the opportunity to ask whether there is a chance in the future to be able to customize builtin types. (In this case many proposals on this list will simply vanish.)

Denis
------
la vita e estrany



More information about the Python-ideas mailing list