Python - When to use file vs open
file()
is a type, like an int or a list. open()
is a function for opening files, and will return a file
object.
This is an example of when you should use open:
f = open(filename, 'r')
for line in f:
process(line)
f.close()
This is an example of when you should use file:
class LoggingFile(file):
def write(self, data):
sys.stderr.write("Wrote %d bytes\n" % len(data))
super(LoggingFile, self).write(data)
As you can see, there's a good reason for both to exist, and a clear use-case for both.
Functionally, the two are the same; open
will call file
anyway, so currently the difference is a matter of style. The Python docs recommend using open
.
When opening a file, it's preferable to use open() instead of invoking the file constructor directly.
The reason is that in future versions they is not guaranteed to be the same (open
will become a factory function, which returns objects of different types depending on the path it's opening).
Two reasons: The python philosophy of "There ought to be one way to do it" and file
is going away.
file
is the actual type (using e.g. file('myfile.txt')
is calling its constructor). open
is a factory function that will return a file object.
In python 3.0 file
is going to move from being a built-in to being implemented by multiple classes in the io
library (somewhat similar to Java with buffered readers, etc.)
You should always use open()
.
As the documentation states:
When opening a file, it's preferable to use open() instead of invoking this constructor directly. file is more suited to type testing (for example, writing "isinstance(f, file)").
Also, file()
has been removed since Python 3.0.