Respostas:
Você sempre deve usar open().
Como a documentação declara:
Ao abrir um arquivo, é preferível usar open () em vez de chamar esse construtor diretamente. O arquivo é mais adequado para o teste de tipo (por exemplo, escrevendo "isinstance (f, file)").
Além disso, file() foi removido desde o Python 3.0.
Duas razões: a filosofia python de "Deveria haver uma maneira de fazer isso" e fileestá desaparecendo.
fileé o tipo real (usando, por exemplo, file('myfile.txt')está chamando seu construtor). opené uma função de fábrica que retornará um objeto de arquivo.
No python 3.0, deixará filede ser incorporado para ser implementado por várias classes na iobiblioteca (um pouco semelhante ao Java com leitores em buffer, etc.)
file()é um tipo, como um int ou uma lista. open()é uma função para abrir arquivos e retornará um fileobjeto.
Este é um exemplo de quando você deve usar o open:
f = open(filename, 'r')
for line in f:
process(line)
f.close()
Este é um exemplo de quando você deve usar o arquivo:
class LoggingFile(file):
def write(self, data):
sys.stderr.write("Wrote %d bytes\n" % len(data))
super(LoggingFile, self).write(data)
Como você pode ver, há uma boa razão para ambas existirem e um caso de uso claro para ambas.
withinstrução with open(filename, 'r') as f: \ for line in f: \ process(line). Isso evita o fechamento explícito. O Python 2.6 e superior suportam nativamente a withdeclaração. No Python 2.5, você deve adicionar from __future__ import with_statementao topo do seu código.
fileclasse era equipada com métodos especiais que são chamados automaticamente sempre que um arquivo é aberto por meio de uma withinstrução. Esses métodos especiais garantem que o arquivo seja aberto e fechado de maneira adequada e segura.
Funcionalmente, os dois são iguais; openvai ligar de filequalquer maneira, então atualmente a diferença é uma questão de estilo. Os documentos do Python recomendam o uso open.
Ao abrir um arquivo, é preferível usar open () em vez de chamar o construtor de arquivos diretamente.
O motivo é que, nas versões futuras, não é garantido o mesmo ( opense tornará uma função de fábrica, que retorna objetos de tipos diferentes, dependendo do caminho que está abrindo).
Sempre use open () para abrir arquivos. file () está sendo removido no 3.0 e está obsoleto no momento. Eles tiveram um tipo de relacionamento estranho, mas file () está indo agora, então não há mais necessidade de se preocupar.
O seguinte é dos documentos do Python 2.6. [material de suporte] adicionado por mim.
Ao abrir um arquivo, é preferível usar open () em vez de invocar esse construtor [file ()] diretamente. O arquivo é mais adequado para o teste de tipo (por exemplo, escrever isinstance (f, arquivo)
Segundo Van Rossum, embora open () seja atualmente um alias para file (), você deve usar open () porque isso pode mudar no futuro.