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

大家讲道理
リリース: 2016-11-07 10:56:07
オリジナル
1478 人が閲覧しました

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」が存在します。 。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート