私は最近、私たちの窓のpython 2.4のコードの一部を通過し、これに遭遇されています:pythonでファイルを開くときに "wua"モードとは何ですか?
self.logfile = open(self.logfile_name, "wua")
私は自分自身に何をすべきかw
、u
とa
知っているが、あなたがそれらを組み合わせるとどうなりますか?
私は最近、私たちの窓のpython 2.4のコードの一部を通過し、これに遭遇されています:pythonでファイルを開くときに "wua"モードとは何ですか?
self.logfile = open(self.logfile_name, "wua")
私は自分自身に何をすべきかw
、u
とa
知っているが、あなたがそれらを組み合わせるとどうなりますか?
a
は余分です。 w
が最初に来るので、wua
はwu
と同じで、ファイルを切り捨てます。注文を元に戻す場合はauw
、それはau
と同じになります。可視化:
>>> f = open('test.txt', 'r')
>>> f.read()
'Initial contents\n'
>>> f.close()
>>> f = open('test.txt', 'wua')
>>> print >> f, 'writing'
>>> f.close()
>>> f = open('test.txt', 'r')
>>> f.read()
'writing\n'
>>> f.close()
>>> f = open('test.txt', 'auw')
>>> print >> f, 'appending'
>>> f.close()
>>> f = open('test.txt', 'r')
>>> f.read()
'writing\nappending\n'
>>> f.close()
(注意:両方a
とw
open the file for writingが、他の切り捨て前者アペンド)
私はあなたが修飾子が何をしたか知っていたことに気づきませんでした。組み合わせると、次のようになります。
AとWは両方とも書き込み用にオープンされているので余計です。 Wを使用すると、ファイルが上書きされます。 Aを使用すると、すべての新しいテキストが既存のコンテンツの後ろに追加されます。
Uは、 "普遍的な改行解釈を持つテキストファイルとして入力するためにファイルXXXを開く"を意味します。
のPython 2.4は、オペレーティングシステムのfopen
機能への組み込みopen
の引数を渡します。 Pythonは特定の条件の下でモード文字列のマングリングを行います。あなたは大文字U
またはrU
を渡す場合
if (strcmp(mode, "U") == 0 || strcmp(mode, "rU") == 0)
mode = "rb";
だから、バイナリ読み込み用のファイルを開きます。 GNU libcのソースを見ると、fopen
のWindowsの実装を記述するMSDNのページによれば、 'u
'オプションは無視されます。
モード文字列に複数のモード指定子( 'r
'、 'w
'、および 'a
')を指定しても効果はありません。これは、モード文字列解析のGNUのlibcの実装を見ることで確認できます
switch (*mode)
{
case 'r':
omode = O_RDONLY;
break;
case 'w':
omode = O_WRONLY;
oflags = O_CREAT|O_TRUNC;
break;
case 'a':
omode = O_WRONLY;
oflags = O_CREAT|O_APPEND;
break;
default:
__set_errno (EINVAL);
return NULL;
}
そうでない場合はモード文字列の最初の文字は、「r
」、「w
」または「a
」の一つが検索されますこれらの文字の1つは、エラーが発生します。
したがって、ファイルが "wua
"として開かれた場合、ファイルは存在しない場合に作成され、切り捨てられます。 'u
'と 'a
'は無視されます。
物事が内部的にどのように実装されているか説明してくれてありがとう! – balu