六、PythonのIOや異常1、オープン(バッファ)ファイルには、ファイルを読みます

1、オープン(バッファ)ファイル、ファイルを読み取ります

1)ファイルモード

モード 意味
R 読み取り専用モード
ワット 書き込みモード
A モードを追加
+ 他のモードと組み合わせて使用​​(更新)モードを、書きます。このような読み書きモードとR +代表+は、(空のファイル・モード、実際の読み取り不可能w)の読み書きモードを表し、wは
B バイナリモードは他のモードと組み合わせて使用​​することができます。例えば、RBは、バイナリ読み取り専用モードを表し、RB +バイナリ読み書きモードを表し、ABはバイナリを表すモードを追加

ここに画像を挿入説明
分析

  • のみ書き込みモードを表し、+ wは読み書きモードが、実際の使用を表すwはファイルがクリアされたため、差が大きくありません。
  • RのR +モードまたはファイルを開き、ファイル自体が存在し、彼らはファイルを作成することはできません要件です。
  • +は、+モードがファイルを開くwは、ファイルが存在しないことができ、wを使用して、open()関数は、自動的に新しいファイルを作成します。
  • Bがファイルを文字ユニットを読み書きするモードを指定されていない場合、Bモード(バイナリコンテンツを表す読み書きファイルのための他のモードに加えてもよい。場合、指定パターンB、バイト単位でファイルを読み書きします)(コンピュータがビット単位でファイルを読み取らない、バイトは8ビットです)

2)オープン()ファイルを開き、ファイルを読み取る)(リード

语法:オープン(ファイル、モード= R ''、緩衝= -1、エンコーディング=なし、エラー=なし、改行=なし、closefd =真、オープナ=なし)

説明:第3のパラメータのopen()関数バッファ制御バッファ

  • システムのデフォルトのバッファサイズは、負です。

  • 0またはFalse、バッファリングされていません。

  • 1またはTrueの値は、バッファリングする(推奨、その後、プログラムの実行は、I / Oは、より優れた性能を有します);

  • 値は、バッファサイズとして、1より大きい整数です。

(1)data.txtをファイルを作成します。

ここに画像を挿入説明

(2)文字で読み取り

説明

  1. (n)を読んで呼び出し方法は、n個の文字を読み込み

    f = open('data.txt', 'r', True)
    
    data1 = f.read(1)
    print(data1)
    print('-'*30)
    
    data2 = f.read(2)
    print(data2)
    
    f.close()    # 关闭文件
    
    第
    ------------------------------
    一行
    

    分析:

    • GBK文字セット符号化(現在のオペレーティング・システム・コードはGBKである)としてdata.txtをファイル
    • >読み取り(2)ファイルポインタ - (1)を読み取ります
  2. 読み取り()メソッドを呼び出し、ファイルのすべての内容

    f = open('data.txt', 'r', True)
    
    data = f.read()
    print(data)
    
    f.close()    
    
    第一行
    第二行
    第三行
    
    

分析:ファイルの内容を読み取るために、現在のオペレーティングシステムのデフォルトの文字セットがオープン()関数は、次のように解決し、例外が発生しやすくなります。

  1. ファイルを開くには、文字セットを指定するには、open()関数を呼び出します

    f = open('data.txt', 'r', True, 'GBK')
    print(f.read())
    f.close()
    
    第一行
    第二行
    第三行
    
    
  2. open()関数は、(下記参照)は、バイナリ方式でファイルを読み込み、文字セットのバイトのデータ復旧を指定します

(3)バイトを読みます

説明:オープンファイルBモードでは、ファイルは、バイナリストリームとして扱われるリード当たり1つのバイト

  1. 読む(N)メソッドを呼び出しすることはnバイトを読み込み、

    f = open('data.txt', 'rb', True)
    
    data1 = f.read(2)
    print(data1, data1.decode('GBK'))    # 字节串,GBK 解码
    print('-'*40)
    
    data2 = f.read(4)
    print(data2, data2.decode('GBK'))
    
    f.close()
    
    b'\xb5\xda' 第
    ----------------------------------------
    b'\xd2\xbb\xd0\xd0' 一行
    
  2. 読み取り()メソッドを呼び出し、ファイルのすべての内容

    f = open('data.txt', 'rb', True)
    
    data = f.read()
    print(data)
    print('-'*50)
    print(data.decode('GBK'))
    
    f.close()
    
    b'\xb5\xda\xd2\xbb\xd0\xd0\r\n\xb5\xda\xb6\xfe\xd0\xd0\r\n\xb5\xda\xc8\xfd\xd0\xd0\r\n'
    --------------------------------------------------
    第一行
    第二行
    第三行
    
    

分析

  • 各文字をコードGBKの文字セットは、2つのバイトを占有します
  • RBモードは、写真、音楽、ビデオ、およびその他の形式などのファイル、任意のファイルのコンテンツを処理するために使用することができますが、読んで

3)ラインでテキストファイルを読み取ります

(1)のreadline([N])和readlines()

  1. readlineの([N]):パラメータnは、この行でn文字のみを指定し読み出す場合、行の内容を読み取ります

    try:
        f = open('data.txt', 'r', True, 'gbk')
        while True:
            line = f.readline()      # 读取一行内容
            if not line:  
                break
            print(line, end='')
    except:
         print('出现异常')
    finally:
        if 'f' in globals():
            f.close()
    
    第一行
    第二行
    第三行
    
  2. readlines():ファイル内のすべての行を読みます

    try:
        f = open('data.txt', 'r', True, 'gbk')
        line = f.readlines()         # 读取所有行,返回所有行组成的列表
        print(line)
    except:
         print('出现异常')
    finally:
        if 'f' in globals():
            f.close()
    
    ['第一行\n', '第二行\n', '第三行\n']
    

(2)ファイルを読み取るために反復子を使用

try:
    f = open('data.txt', 'r', True, 'gbk')
    for line in f:           # 文件对象本身可迭代,直接用 for-in 循环即可
        print(line, end='')
except:
     print('出现异常')
finally:
    if 'f' in globals():
        f.close()
第一行
第二行
第三行

(3)指定された行読み取りlinecacheを使用して

説明:linecacheモジュールは、指定された行Pythonソースファイルから読み取られ、使用される内部キャッシュの最適化に格納されていることを可能にします。メインモジュールは、ソースファイルのPython読み取るように設計されている(UTF-8文字セット内のPythonソースファイルを保存されている)ので、格納されているUTF-8文字セット内の他のモジュールファイルを読み取ることができるようになっています。

# -*- coding:utf-8 -*-
# @Time    : 2019/7/5 10:20
# @Author  : wangkai
# @File    : test.py

import linecache
import random

print(linecache.getline(random.__file__, 3), end='')    # 读取random模块的源文件的第3行
print('-'*30)

print(linecache.getline('test.py', 2), end='')    # 读取本程序的第2行
    integers
------------------------------
# @Time    : 2019/7/5 10:20

おすすめ

転載: blog.csdn.net/qq_36512295/article/details/94738530