Python file() function
Question: I've been adapting an old piece of code to be Python 3 compliant and I came
across this individual script

    
    
    """Utility functions for processing images for delivery to Tesseract"""
    
    import os
    
    
    def image_to_scratch(im, scratch_image_name):
        """Saves image in memory to scratch file.  .bmp format will be read 
            correctly by Tesseract"""
        im.save(scratch_image_name, dpi=(200, 200))
    
    
    def retrieve_text(scratch_text_name_root):
        inf = file(scratch_text_name_root + '.txt')
        text = inf.read()
        inf.close()
        return text
    
    
    def perform_cleanup(scratch_image_name, scratch_text_name_root):
        """Clean up temporary files from disk"""
        for name in (scratch_image_name, scratch_text_name_root + '.txt',
                     "tesseract.log"):
            try:
                os.remove(name)
            except OSError:
                pass
    

On the second function, `retrieve_text` the first line fails with:

    
    
    Traceback (most recent call last):
      File ".\anpr.py", line 15, in <module>
        text = image_to_string(Img)
      File "C:\Users\berna\Documents\GitHub\Python-ANPR\pytesser.py", line 35, in image_to_string
        text = util.retrieve_text(scratch_text_name_root)
      File "C:\Users\berna\Documents\GitHub\Python-ANPR\util.py", line 10, in retrieve_text
        inf = file(scratch_text_name_root + '.txt')
    NameError: name 'file' is not defined
    

Is this a deprecated function or another problem alltogether? Should I be
replacing `file()` with something like
[`open()`](https://docs.python.org/3/tutorial/inputoutput.html#reading-and-
writing-files)?


Answer: In Python 2, `open` and `file` are mostly equivalent. `file` is the type and
`open` is a function with a slightly friendlier name; both take the same
arguments and do the same thing when called, but calling `file` to create
files is discouraged and trying to do type checks with `isinstance(thing,
open)` doesn't work.

In Python 3, the file implementation in the `io` module is the default, and
the `file` type in the builtin namespace is gone. `open` still works, and is
what you should use.

