回答:
常にを使用する必要がありますopen()
。
などのドキュメントの状態:
ファイルを開くときは、このコンストラクターを直接呼び出すのではなく、open()を使用することをお勧めします。fileは型テストに適しています(たとえば、 "isinstance(f、file)"と書く)。
また、Python 3.0以降でfile()
は削除されています。
file()
intやリストのような型です。open()
ファイルを開くための関数で、file
オブジェクトを返します。
これは、openを使用する必要がある場合の例です。
f = open(filename, 'r')
for line in f:
process(line)
f.close()
これは、ファイルを使用する必要がある場合の例です。
class LoggingFile(file):
def write(self, data):
sys.stderr.write("Wrote %d bytes\n" % len(data))
super(LoggingFile, self).write(data)
ご覧のとおり、両方が存在するのには十分な理由があり、両方に明確なユースケースがあります。
with
ステートメントで開く必要があります。with open(filename, 'r') as f: \ for line in f: \ process(line)
。これにより、明示的なクローズが回避されます。Python 2.6以降では、このwith
ステートメントがネイティブにサポートされています。Python 2.5ではfrom __future__ import with_statement
、コードの先頭に追加する必要があります。
file
クラスはwith
ステートメントによってファイルが開かれるたびに自動的に呼び出される特別なメソッドを備えていました。これらの特別な方法により、ファイルが適切かつ安全に開かれ、閉じられます。
機能的には、この2つは同じです。とにかくopen
呼び出すfile
ので、現在の違いはスタイルの問題です。Pythonのドキュメントが使用することをお勧めしますopen
。
ファイルを開くときは、ファイルコンストラクターを直接呼び出すのではなく、open()を使用することをお勧めします。
その理由は、将来のバージョンでは同じであることが保証されないためです(open
ファクトリ関数になり、開いているパスに応じて異なるタイプのオブジェクトを返します)。
ファイルを開くためにのみopen()を使用してください。file()は実際には3.0で削除されており、現時点では非推奨です。それらはある種の奇妙な関係を持っていましたが、file()は現在進んでいるので、もう心配する必要はありません。
以下はPython 2.6ドキュメントからの抜粋です。[ブラケット関連]私が追加しました。
ファイルを開くときは、この[file()]コンストラクターを直接呼び出すのではなく、open()を使用することをお勧めします。ファイルは型のテストに適しています(たとえば、isinstance(f、file)と記述します)
Van Rossum氏によれば、open()は現在file()のエイリアスですが、将来変更される可能性があるため、open()を使用する必要があります。