私が使用していたopen()
関数はio.open()
のエイリアスであり、インポート*
from os
はそれを覆い隠します。
io
モジュールとos
モジュールを介してファイルを開くことの違いは何ですか?
io.open()
は、ファイルI/Oへの推奨される高レベルのインターフェイスです。これは、OSレベルのファイル記述子をオブジェクトにラップして、Pythonの方法でファイルにアクセスできるようにします。
os.open()
は、下位レベルのPOSIX syscallの単なるラッパーです。シンボリック(およびPOSIX-y)の引数が少なく、開いているファイルを表すファイル記述子(数値)を返します。ファイルオブジェクトを返すしない。戻り値には、read()
またはwrite()
メソッドはありません。
os.open()
ドキュメント から:
この関数は、低レベルI/Oを対象としています。通常の使用法では、組み込み関数
open()
を使用します。これは、read()
およびwrite()
メソッド(およびその他多数)で「ファイルオブジェクト」を返します。
_os.open
_は open()
from C from Unix によく似ています。もっと低レベルのことをしているのでなければ、それを使いたくないでしょう。実際のファイル記述子(オブジェクトではなく数値など)を提供します。
_io.open
_は、基本的なPython open()
であり、常に使用したいものです。
既存の回答に追加するには:
私が使用していたopen()関数はio.open()のエイリアスであることに気付きました
open()
== io.open()
in Python 3のみ。Python 2では、これらは異なります。
Pythonのopen()
を使用すると、便利なread()
およびwrite()
メソッドを使用して、使いやすいファイルオブジェクトを取得できます。 OSレベルでは、ファイルはファイル記述子(またはWindowsのファイルハンドル)を使用してアクセスされます。したがって、os.open()
は暗黙的に内部で使用する必要があります。Pythonこれに関してはソースコードですが、open()
にPython 3.3で追加されたopener
パラメータのドキュメントには、
Callerをopenerとして渡すことで、カスタムオープナーを使用できます。その後、openerを(file、flags)。 openerは、オープンファイル記述子を返す必要があります(_
os.open
_をopenerは、None
)を渡すのと同様の機能になります。
したがって、os.open()
はopen()
のデフォルトのオープナーであり、ファイルフラグまたはモードを変更する必要がある場合は、その周りにカスタムラッパーを指定することもできます。特定のディレクトリに関連するファイルを開くカスタムオープナーの例については、open()
の documentation を参照してください。
データベースとシステムアプリケーションの開発者は、通常、open
ではなくfopen
を使用します。前者は、いつ、何を、どのようにメモリコンテンツをバッキングストア(つまり、ディスク上のファイル)に書き込むかを細かく制御できるためです。 。
Unixライクなオペレーティングシステムでは、open
を使用して通常のファイル、ソケットエンドポイント、デバイス、パイプなどを開きます。open
関数呼び出しが成功するたびに、正のファイル記述子番号が返されます。これらのオブジェクトのさまざまなイベント通知などをチェックするための一貫したAPIとフレームワークを提供します。
ただし、fopen
は標準のC関数であり、通常は通常のファイルを開いてFILE
データ構造を返すために使用されます。 fopen
は実際にはopen
を呼び出します。 fopen
は、メモリコンテンツをディスクにフラッシュまたは同期するタイミングを心配する必要がなく、イベント通知も必要ないため、通常の使用には十分です。
os.open()
メソッドは、ファイルfileを開き、フラグに応じてさまざまなフラグを設定し、モードに応じてそのモードを設定します。
デフォルトのモードは0777(8進数)で、現在のマスク解除値が最初にマスクされます。
このメソッドは、新しく開かれたファイルのファイル記述子を返します。
その間、
io.open()
メソッドは、文字列モードで指定されたモードでファイルを開きます。新しいファイルハンドルを返します。エラーの場合は、nilとエラーメッセージを返します。
お役に立てれば