Pythonのopen()関数でファイルの開き方を指定する使い方を詳しく説明します

2321 ワード

ファイルの開き方
Open()関数でファイルを開くと、いくつかの開くモードがあります.
'r'->読み取り専用'w'->書き込みのみ、ファイルが存在する場合はクリア、存在しない場合は作成します.a'->追加、ファイル末尾'b'->バイナリモード、例えば画像、オーディオ、wordファイルを開く.'+'->更新(読み取り/書き込み可能)
この'+'号付きはちょっと理解しにくいので、上コードで感じてください.

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

コード1、

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
']

コード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

まず、改行文字「戻り文字」と「r」の概念を理解します.改行(LF,Line-Feed)は、新しい行を指します.'r',リターン記号(CR,Carriage-Return)は,行頭に戻ることを指す.
システムによって改行IDが異なるためです.

windows->'\r
' unix->'
' mac->'\r'

これがwindowsの下のtxtがlinuxが開いたときに行末に'^M'がある理由です.これは私がlinuxの下でスクリプトを走ってゲームのデータをエクスポートしてローカルwindowsに開いて1行になった理由です.
実はテキストファイルもバイナリファイルで、テキスト符号化のバイナリファイルで、テキストファイルはいくつかの非可視文字を処理して、可読性を増加しました.
pythonではos.linesepは、現在のシステムの改行IDを取得します.例えばwindowsの下でos.linesepは'r'です.pythonで改行IDを操作するときは、どのプラットフォームの下にあるかにかかわらず、直接「」を使えばいいので、pythonは自動的にシステムによって異なるIDに変わります.
これらの理論的根拠があれば,本稿の先頭コードの「奇妙」現象を解析することができる.コード1では、テキストモードで開いているファイルは、改行IDがpythonで「」に処理され、バイナリモードで開いているファイルはそのままです.コード2では、バイナリモードで開き、テキストモードで書き込みます.バイナリが開くのはそのままで「r」ですが、テキストモードが書き込まれるとpythonが「'r」に変換するので、実は'rr'を書き込むのと同じなので、'^M'が増えてしまいます.