open() 関数を使用してファイルを開く場合、いくつかの開くモードがあります。
'r'->読み取り専用
'w'->書き込みのみ、ファイルがすでに存在する場合はクリアし、存在しない場合は作成します。
'a'->追加、ファイルの末尾に書き込みます
'b'->画像、音声、Wordファイルを開くなどのバイナリモード。
「+」->更新 (読み取り可能および書き込み可能)
これに「+」記号が付いているものは少し理解するのが難しいため、コードにアクセスして感覚を掴んでください。
with open('foo.txt', 'w+') as f:
f.write('barn')
f.seek(0)
data = f.read()
, 上記のコードは、書くだけでなく読み取ることもできます。最初に先頭の f.seek(0) を見つける必要があることに注意してください。そうしないと、空のデータが読み取られてしまいます。
「+」記号は読み書き可能であるため、「w+」と「r+」の違いは何なのか混乱する人もいるかもしれません。
つまり、
'w+' はクリアして作成します (ファイルが既に存在する場合はクリアされ、存在しない場合は作成されます。)
'r+' はクリアまたは作成しません
バイナリ モードのテキスト ファイル
まず、以下のコードの「奇妙な」現象を見てください。
Windows で、次の内容の f.txt ファイルがあるとします。
hello world
コード1、
with open('f.txt', 'r') as f: print f.readlines() with open('f.txt', 'rb') as f: print f.readlines()
出力
['hello\n', 'world\n'] ['hello\r\n', 'world\r\n']
コード2、
with open('f.txt', 'rb') as f: data = f.read() with open('f.txt', 'w') as f: f.write(data)
ファイルを開くとこうなります、
hello^M world^M
まず、改行文字「n」と復帰文字「r」の概念を理解してください。 。
「n」、改行文字 (LF、Line-Feed) は、新しい行を指します。
「r」、キャリッジ リターン (CR、Carriage-Return) は、行の先頭に戻ることを指します。
システムが異なると改行フラグが異なるためです。
windows->'\r\n' unix->'\n' mac->'\r'
これが、Windows の txt を Linux で開いたときに行末に '^M' がある理由です。
これが、Linux でゲーム データをエクスポートするスクリプトを実行し、ローカル Windows で開くと 1 行になった理由です。
実際、テキスト ファイルはバイナリ ファイルでもあり、テキスト ファイルは読みやすさを高めるために一部の目に見えない文字を処理します。
Pythonでは、os.linesepを通じて現在のシステムの改行識別子を取得できます。たとえば、Windows では、os.linesep は「rn」です。
Python で改行フラグを操作するときは、どのプラットフォームであっても関係ありません。「n」を使用するだけで、Python は異なるシステムに応じて異なるフラグに自動的に変換します。
上記の理論的根拠により、この記事の冒頭のコードの「奇妙な」現象を分析できます。
コード 1 では、ファイルがテキスト モードで開かれた場合、改行フラグは Python によって「n」に処理されますが、バイナリ モードで開かれた場合は変更されません。
コード 2 では、バイナリ モードで開き、テキスト モードで書き込みます。バイナリで開いた場合、それは依然として「rn」であり、テキストモードで書くとき、Pythonは「n」を「rn」に変換するため、実際には「rrn」と書くのと同じなので、余分な「^M」が存在します。 。