Pythonfile
との違いは何ですか?open
いつどれを使うべきですか?(私は2.5にいると言ってください)
6 に答える
2つの理由:「それを行うには1つの方法があるはずです」というPythonの哲学がなくなりつつありfile
ます。
file
は実際の型です(たとえばfile('myfile.txt')
、コンストラクターを呼び出しています)。open
ファイルオブジェクトを返すファクトリ関数です。
Python 3.0ではfile
、組み込みからライブラリ内の複数のクラスによる実装に移行しio
ます(バッファ付きリーダーなどを備えたJavaにいくらか似ています)。
file()
intやlistのような型です。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)
ご覧のとおり、両方が存在するのには十分な理由があり、両方の明確なユースケースがあります。
機能的には、2つは同じです。open
とにかく電話するfile
ので、現在の違いはスタイルの問題です。Pythonのドキュメントでは、の使用を推奨してopen
います。
ファイルを開くときは、ファイルコンストラクターを直接呼び出すのではなく、open()を使用することをお勧めします。
その理由は、将来のバージョンでは、それらが同じであることが保証されていないためです(open
ファクトリ関数になり、開いているパスに応じて異なるタイプのオブジェクトを返します)。
ファイルを開く場合にのみopen()を使用してください。file()は実際には3.0で削除されており、現時点では非推奨です。彼らはある種の奇妙な関係を持っていましたが、file()は現在進行中であるため、もう心配する必要はありません。
以下はPython2.6ドキュメントからのものです。[ブラケットのもの]私が追加しました。
ファイルを開くときは、この[file()]コンストラクターを直接呼び出すのではなく、open()を使用することをお勧めします。fileは、型テストに適しています(たとえば、isinstance(f、file)の記述)
Van Rossum氏によると、open()は現在file()のエイリアスですが、将来変更される可能性があるため、open()を使用する必要があります。