web-dev-qa-db-ja.com

python3 open "x"モードは何をしますか?

python 3では、新しいオープンファイルモード "x"は何をしますか?

これが python のドキュメントです:

'r':読み取り用に開く(デフォルト)

'w':最初にファイルを切り捨てて書き込み用に開く

'x':排他的作成のためにオープン、ファイルがすでに存在する場合は失敗

'a':書き込み用にオープンし、存在する場合はファイルの最後に追加します

'b':バイナリモード

't':テキストモード(デフォルト)

'+':更新(読み取りと書き込み)のためにディスクファイルを開く

'U':ユニバーサル改行モード(非推奨)

「独占的創造」とはどういう意味ですか?

「x」モードをテストして、いくつかを見つけます。

  • 「r/w/a」では使用できません
  • 「x」は書き込みのみ可能です。 「x +」は書き込みと読み取りができます
  • ファイルはopenの前に存在していてはなりません
  • ファイルはopenの後に作成されます

したがって、「x」は「w」に似ています。ただし、「x」の場合、ファイルが存在する場合は、FileExistsErrorを発生させます。 「w」の場合は、新しいファイルを作成するか、既存のファイルを切り捨てます。

私は正しいですか?これが唯一の違いですか?

25
Tyler Temp

@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
18
Abhijit

簡単に言うと、'x'モードでファイルを開くと、次のようになります。

Atomicallydo:(存在するかどうかを確認して作成ファイル)

4
Omer Dagan

はい、基本的にそれだけです。

プログラムの2つのインスタンスが同時に実行されている場合、xモードを使用するとoneのみがファイルを作成し、もう1つは失敗します。

古典的な例は、プロセスIDをpidファイルに書き込むデーモンです(そのため、簡単にシグナルを送信できます)。 xを使用すると、一度に実行できるのはoneデーモンのみであり、xモードを使用しないと実行が困難で、競合状態が発生しやすい。

4
paxdiablo