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 file
está 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á file
de ser incorporado para ser implementado por várias classes na io
biblioteca (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 file
objeto.
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.
with
instruçã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 with
declaração. No Python 2.5, você deve adicionar from __future__ import with_statement
ao topo do seu código.
file
classe era equipada com métodos especiais que são chamados automaticamente sempre que um arquivo é aberto por meio de uma with
instrução. Esses métodos especiais garantem que o arquivo seja aberto e fechado de maneira adequada e segura.
Funcionalmente, os dois são iguais; open
vai ligar de file
qualquer 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 ( open
se 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.