Pythonのopen()関数指定ファイルの開き方の使い方を詳しく説明します。
ファイルの開き方
私たちはopen関数でファイルを開くと、いくつかのパターンがあります。
'r'->読み取り専用
'w'->書き込みだけで、ファイルが存在すると空になり、存在しないなら作成します。
'a'->追加して、ファイルの最後まで書きます。
'b'->バイナリモードで、画像、オーディオ、ワードファイルを開くなどです。
'+'->更新(読み書き可能)
このバンドの'+'の番号はちょっと分かりにくいです。コードを通して感じます。
何人かの人は迷いがあるかもしれません。'+'号を持って読むなら書くことができます。'w+'は'r+'と何が違いますか?
それは、
'w+'は空になります。作成します。(既存のファイルは空です。存在しない場合は作成します。)
'r+'は空ではなく、作成しません。
テキストファイルをバイナリモードで開けない
まず次のコードの「怪しい」現象を見てください。
もしwindowsの下で、私はf.txtファイルがあって、中の内容は下のようです。
''は、改行符(LF、Line-Feed)で、新しい行を指します。
'\r',回車符(CR,Carrage-Rieturn)は、行頭に戻ることを意味します。
異なるシステムでの改行表示は異なるからです。
これはどうしてですか?私はlinuxの下でシナリオを走ってゲームのデータを導いて当地のwindowsまで開けて1行になりました。
テキストファイルもバイナリファイルです。テキストコードのバイナリファイルです。テキストファイルは見えない文字を処理して、読み取り可能性を高めています。
pythonでは、OS.linsepを通じて現在のシステムの改行マークを取得することができます。例えばwindowsの下で、os.linsepは'\r'です。
pythonで改行マークを操作するときは、どのプラットフォームの下であれ、直接「」を使えばいいですか?pythonは自動的に異なるシステムによって異なる標識に変わります。
これらの理論的根拠があれば、本文の冒頭のコードの「怪しい」現象を解析することができます。
コード1では、テキストモードで開いたファイルは、改行フラグがpythonで'に処理されますが、バイナリモードで開くとそのままです。
コード2では、バイナリモードで開き、テキストモードで書き込みます。バイナリオープンはそのままですか?\r'ですが、テキストモードの書き込みはpythonが'を'r'に変換しますので、'r\r'を書き込んだのと同じです。だから'^M'が多くなりました。
私たちはopen関数でファイルを開くと、いくつかのパターンがあります。
'r'->読み取り専用
'w'->書き込みだけで、ファイルが存在すると空になり、存在しないなら作成します。
'a'->追加して、ファイルの最後まで書きます。
'b'->バイナリモードで、画像、オーディオ、ワードファイルを開くなどです。
'+'->更新(読み書き可能)
このバンドの'+'の番号はちょっと分かりにくいです。コードを通して感じます。
with open('foo.txt', 'w+') as f:
f.write('bar
')
f.seek(0)
data = f.read()
上のコードは書くだけでなく、読むこともできます。注意先に先頭に位置付けてください。f.seek(0)でなければ空のデータを読みます。何人かの人は迷いがあるかもしれません。'+'号を持って読むなら書くことができます。'w+'は'r+'と何が違いますか?
それは、
'w+'は空になります。作成します。(既存のファイルは空です。存在しない場合は作成します。)
'r+'は空ではなく、作成しません。
テキストファイルをバイナリモードで開けない
まず次のコードの「怪しい」現象を見てください。
もしwindowsの下で、私はf.txtファイルがあって、中の内容は下のようです。
hello
world
コード一、
with open('f.txt', 'r') as f:
print f.readlines()
with open('f.txt', 'rb') as f:
print f.readlines()
出力
['hello
', 'world
']
['hello\r
', 'world\r
']
コード二、
with open('f.txt', 'rb') as f:
data = f.read()
with open('f.txt', 'w') as f:
f.write(data)
ファイルを開くと、次のようになります。
hello^M
world^M
まず、改行符''と回車符'\r'の概念を理解します。''は、改行符(LF、Line-Feed)で、新しい行を指します。
'\r',回車符(CR,Carrage-Rieturn)は、行頭に戻ることを意味します。
異なるシステムでの改行表示は異なるからです。
windows->'\r
'
unix->'
'
mac->'\r'
これはどうしてwindowsの下のtxtはlinuxが開ける時行末に'^M'がありますか?これはどうしてですか?私はlinuxの下でシナリオを走ってゲームのデータを導いて当地のwindowsまで開けて1行になりました。
テキストファイルもバイナリファイルです。テキストコードのバイナリファイルです。テキストファイルは見えない文字を処理して、読み取り可能性を高めています。
pythonでは、OS.linsepを通じて現在のシステムの改行マークを取得することができます。例えばwindowsの下で、os.linsepは'\r'です。
pythonで改行マークを操作するときは、どのプラットフォームの下であれ、直接「」を使えばいいですか?pythonは自動的に異なるシステムによって異なる標識に変わります。
これらの理論的根拠があれば、本文の冒頭のコードの「怪しい」現象を解析することができます。
コード1では、テキストモードで開いたファイルは、改行フラグがpythonで'に処理されますが、バイナリモードで開くとそのままです。
コード2では、バイナリモードで開き、テキストモードで書き込みます。バイナリオープンはそのままですか?\r'ですが、テキストモードの書き込みはpythonが'を'r'に変換しますので、'r\r'を書き込んだのと同じです。だから'^M'が多くなりました。