2009-05-20 6 views

答えて

5

aは余分です。 wが最初に来るので、wuawuと同じで、ファイルを切り捨てます。注文を元に戻す場合は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() 

(注意:両方awopen the file for writingが、他の切り捨て前者アペンド)

3

私はあなたが修飾子が何をしたか知っていたことに気づきませんでした。組み合わせると、次のようになります。

AとWは両方とも書き込み用にオープンされているので余計です。 Wを使用すると、ファイルが上書きされます。 Aを使用すると、すべての新しいテキストが既存のコンテンツの後ろに追加されます。

Uは、 "普遍的な改行解釈を持つテキストファイルとして入力するためにファイルXXXを開く"を意味します。

  • Wは書き込み
  • Aのためであるアペンド
  • のためにUが 定義され 改行文字を使用するために、ファイルを変換しますです。
  • ここ

より:フードの下側に http://codesnippets.joyent.com/posts/show/1969

2

の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'は無視されます。

+0

物事が内部的にどのように実装されているか説明してくれてありがとう! – balu