内蔵のPythonでオープン機能、モード間の正確な違いは何ですかw
、a
、w+
、a+
、とr+
?
特に、ドキュメンテーションは、これらすべてがファイルへの書き込みを許可することを意味し、特に「追加」、「書き込み」、および「更新」のためにファイルを開くと述べていますが、これらの用語の意味を定義していません。
内蔵のPythonでオープン機能、モード間の正確な違いは何ですかw
、a
、w+
、a+
、とr+
?
特に、ドキュメンテーションは、これらすべてがファイルへの書き込みを許可することを意味し、特に「追加」、「書き込み」、および「更新」のためにファイルを開くと述べていますが、これらの用語の意味を定義していません。
回答:
開始モードは、C標準ライブラリ関数の場合とまったく同じfopen()
です。
BSD fopen
マンページでは、それらを次のように定義しています。
The argument mode points to a string beginning with one of the following
sequences (Additional characters may follow these sequences.):
``r'' Open text file for reading. The stream is positioned at the
beginning of the file.
``r+'' Open for reading and writing. The stream is positioned at the
beginning of the file.
``w'' Truncate file to zero length or create text file for writing.
The stream is positioned at the beginning of the file.
``w+'' Open for reading and writing. The file is created if it does not
exist, otherwise it is truncated. The stream is positioned at
the beginning of the file.
``a'' Open for writing. The file is created if it does not exist. The
stream is positioned at the end of the file. Subsequent writes
to the file will always end up at the then current end of file,
irrespective of any intervening fseek(3) or similar.
``a+'' Open for reading and writing. The file is created if it does not
exist. The stream is positioned at the end of the file. Subse-
quent writes to the file will always end up at the then current
end of file, irrespective of any intervening fseek(3) or similar.
w
し、w+
両方を行うことができますThe file is created if it does not exist
b
モードに追加し、バイナリモードでファイルを開き、そのようなモードもあるrb
、wb
とr+b
。Windows上のPythonでは、テキストファイルとバイナリファイルが区別されます。テキストファイルの行末文字は、データの読み取りまたは書き込み時に自動的にわずかに変更されます。
+
それがそうであるならば、私は一貫した独立した何かをしないと言ってもいいですかa
、w
それともr
?それとも私はパターンを見ることに失敗していますか?パターンは何ですか?
モード間の主な違いが何であるかについての精神的なイメージを構築するためだけに、時々Googleを改めて開く必要があることに気づきました。なので、次回は図の方が読みやすいと思いました。たぶん他の誰かもそれが役に立つと思うでしょう。
a
説明がある間違いました。書き込みは常に最後に配置されます。
Subsequent writes to the file will always end up at the then current end of file, irrespective of any intervening fseek(3) or similar
、最初の位置が終わりであると言うよりも少し強いプロパティを参照していると思います。
同じ情報、表形式のみ
| r r+ w w+ a a+
------------------|--------------------------
read | + + + +
write | + + + + +
write after seek | + + +
create | + + + +
truncate | + +
position at start | + + + +
position at end | + +
意味は次のとおりです:(誤解を避けるために)
書き込み-ファイルへの書き込みが許可されます
create-ファイルがまだ存在しない場合は作成されます
切り捨て-ファイルを開く間、ファイルは空になります(ファイルのすべての内容が消去されます)
先頭の位置-ファイルが開かれた後、初期位置はファイルの先頭に設定されます
注:a
とa+
、常にファイルの末尾に追加は-どんな無視seek
動きを。
ところで。a+
モードで開いた新しいファイルの少なくとも私のwin7 / python2.7での興味深い動作:-2
write('aa'); seek(0, 0); read(1); write('b')
番目write
は無視されます-2
write('aa'); seek(0, 0); read(2); write('b')
番目のwrite
レイズIOError
open(file,'a'); close(); open(file,'r+')
これを達成するために使用します。
a
およびa+
writesは常にファイルの最後で発生するというメモを追加することをお勧めしますseek()
。
オプションは、C標準ライブラリのfopen関数と同じです。
w
ファイルを切り捨て、すでにそこにあったものを上書きします
a
ファイルに追加し、すでにそこにあったものに追加します
w+
読み取りと書き込みのために開き、ファイルを切り捨てますが、ファイルに書き込まれた内容を読み戻すこともできます
a+
追加および読み取り用に開き、ファイルへの追加とその内容の読み取りの両方が可能
これは、クロスプラットフォームの実行、つまりCYAとして実行することを検討することが重要だと思います。:)
Windowsでは、モードに追加された「b」はバイナリモードでファイルを開くため、「rb」、「wb」、「r + b」などのモードもあります。WindowsのPythonでは、テキストファイルとバイナリファイルが区別されます。テキストファイルの行末文字は、データの読み取りまたは書き込み時に自動的にわずかに変更されます。ファイルデータに対するこの舞台裏の変更は、ASCIIテキストファイルでは問題ありませんが、JPEGファイルやEXEファイルのようなバイナリデータは破損します。そのようなファイルを読み書きするときは、バイナリモードを使用するように十分注意してください。Unixでは、モードに「b」を追加しても問題ないため、すべてのバイナリファイルに対してプラットフォームに依存せずに使用できます。
これはPython Software Foundation 2.7.xから直接引用されています。