python 3では、新しいオープンファイルモード "x"は何をしますか?
これが python のドキュメントです:
'r':読み取り用に開く(デフォルト)
'w':最初にファイルを切り捨てて書き込み用に開く
'x':排他的作成のためにオープン、ファイルがすでに存在する場合は失敗
'a':書き込み用にオープンし、存在する場合はファイルの最後に追加します
'b':バイナリモード
't':テキストモード(デフォルト)
'+':更新(読み取りと書き込み)のためにディスクファイルを開く
'U':ユニバーサル改行モード(非推奨)
「独占的創造」とはどういう意味ですか?
「x」モードをテストして、いくつかを見つけます。
open
の前に存在していてはなりませんopen
の後に作成されますしたがって、「x」は「w」に似ています。ただし、「x」の場合、ファイルが存在する場合は、FileExistsErrorを発生させます。 「w」の場合は、新しいファイルを作成するか、既存のファイルを切り捨てます。
私は正しいですか?これが唯一の違いですか?
@Martjinがすでに言ったように、あなたはすでにあなた自身の質問に答えました。テキストをよりよく理解するために、マニュアルの説明だけを拡大します
'x':排他的作成のためにオープン、ファイルがすでに存在する場合は失敗
exclusive creation
を指定すると、ファイルを排他的に作成するためにこのモードを使用することになります。これは、w
またはa
のいずれかのモードで既存のファイルを誤って切り捨てたり、追加したりしない場合に必要です。
これがない場合、開発者は、更新のためにファイルを開くためにジャンプする前に、ファイルの存在を確認するように注意する必要があります。
このモードでは、コードは次のように記述されます。
try:
with open("fname", "x") as fout:
#Work with your open file
except FileExistsError:
# Your error handling goes here
以前は、あなたのコードは次のように書かれていたかもしれませんが
import os.path
if os.path.isfile(fname):
# Your error handling goes here
else:
with open("fname", "w") as fout:
# Work with your open file
簡単に言うと、'x'
モードでファイルを開くと、次のようになります。
Atomicallydo:(存在するかどうかを確認して作成ファイル)
はい、基本的にそれだけです。
プログラムの2つのインスタンスが同時に実行されている場合、x
モードを使用するとoneのみがファイルを作成し、もう1つは失敗します。
古典的な例は、プロセスIDをpid
ファイルに書き込むデーモンです(そのため、簡単にシグナルを送信できます)。 x
を使用すると、一度に実行できるのはoneデーモンのみであり、x
モードを使用しないと実行が困難で、競合状態が発生しやすい。