ホームページ  >  記事  >  バックエンド開発  >  Python で open() 関数を使用してファイルを開く方法を指定する方法

Python で open() 関数を使用してファイルを開く方法を指定する方法

高洛峰
高洛峰オリジナル
2017-03-03 15:19:481952ブラウズ

ファイルを開くメソッド

open() 関数を使用してファイルを開く場合、いくつかの開きモードがあります。

'r'->読み取り専用
'w'->書き込みのみ。ファイルが既に存在する場合はクリアし、存在しない場合は作成します。
'a'->追加、ファイルの末尾に書き込みます
'b'->画像、音声、Word ファイルを開くなどのバイナリ モード。
'+'->更新 (読み取り可能および書き込み可能)

これに「+」記号が付いているものは少し理解するのが難しいため、コードを参照して感覚を掴んでください。

with open('foo.txt', 'w+') as f: 
  f.write('bar\n') 
  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」が存在します。 。

ファイルを開く方法を指定するための Python の open() 関数の使用法に関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。