Qual é a diferença entre file
e open
no Python? Quando devo usar qual? (Diga que estou no 2.5)
138
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 naio
biblioteca (um pouco semelhante ao Java com leitores em buffer, etc.)fonte
file()
é um tipo, como um int ou uma lista.open()
é uma função para abrir arquivos e retornará umfile
objeto.Este é um exemplo de quando você deve usar o open:
Este é um exemplo de quando você deve usar o arquivo:
Como você pode ver, há uma boa razão para ambas existirem e um caso de uso claro para ambas.
fonte
with
instruçãowith 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 awith
declaração. No Python 2.5, você deve adicionarfrom __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 umawith
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 defile
qualquer maneira, então atualmente a diferença é uma questão de estilo. Os documentos do Python recomendam o usoopen
.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).fonte
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.
fonte
Segundo Van Rossum, embora open () seja atualmente um alias para file (), você deve usar open () porque isso pode mudar no futuro.
fonte