140

Pythonfileとの違いは何ですか?openいつどれを使うべきですか?(私は2.5にいると言ってください)

4

6 に答える 6

155

常にを使用する必要がありますopen()

ドキュメントに記載されているように:

ファイルを開くときは、このコンストラクターを直接呼び出すのではなく、open()を使用することをお勧めします。fileは、型テストに適しています(たとえば、「isinstance(f、file)」と記述します)。

また、 Python3.0以降file() は削除されています。

于 2008-09-22T03:07:44.503 に答える
33

2つの理由:「それを行うには1つの方法があるはずです」というPythonの哲学がなくなりつつありfileます。

fileは実際の型です(たとえばfile('myfile.txt')、コンストラクターを呼び出しています)。openファイルオブジェクトを返すファクトリ関数です。

Python 3.0ではfile、組み込みからライブラリ内の複数のクラスによる実装に移行しioます(バッファ付きリーダーなどを備えたJavaにいくらか似ています)。

于 2008-09-22T03:10:16.290 に答える
19

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)

ご覧のとおり、両方が存在するのには十分な理由があり、両方の明確なユースケースがあります。

于 2008-09-22T03:32:08.860 に答える
7

機能的には、2つは同じです。openとにかく電話するfileので、現在の違いはスタイルの問題です。Pythonのドキュメントでは、の使用を推奨してopenいます。

ファイルを開くときは、ファイルコンストラクターを直接呼び出すのではなく、open()を使用することをお勧めします。

その理由は、将来のバージョンでは、それらが同じであることが保証されていないためです(openファクトリ関数になり、開いているパスに応じて異なるタイプのオブジェクトを返します)。

于 2008-09-22T03:08:37.747 に答える
4

ファイルを開く場合にのみopen()を使用してください。file()は実際には3.0で削除されており、現時点では非推奨です。彼らはある種の奇妙な関係を持っていましたが、file()は現在進行中であるため、もう心配する必要はありません。

以下はPython2.6ドキュメントからのものです。[ブラケットのもの]私が追加しました。

ファイルを開くときは、この[file()]コンストラクターを直接呼び出すのではなく、open()を使用することをお勧めします。fileは、型テストに適しています(たとえば、isinstance(f、file)の記述)

于 2008-09-22T03:10:45.183 に答える
2

Van Rossum氏によると、open()は現在file()のエイリアスですが、将来変更される可能性があるため、open()を使用する必要があります。

于 2008-09-22T03:12:27.097 に答える