【2017-10-30】ファイルとIO(二)

2324 ワード

1ヶ月ぶりに更新を続け、休暇を過ごしたり、スクリプトを書いたり、テストをしたり...
前の記事では、ファイル操作の基本的な使い方について説明し、次に一般的なパラメータや関数について説明します.
  • open()共通パラメータ
  • encodingパラメータは、開くファイルで使用する符号化を指定し、ファイルの読み書き操作はデフォルトでシステム符号化を使用し、sys.getdefaultencoding()を呼び出すことによって得ることができ、通常utf 8
  • である.
  • newlineパラメータ、改行文字を指定し、取った値はNone,'\r','\r'
  • である.
  • errorsパラメータは、符号化エラーの場合、この符号化を用いて処理することができる.値を取るのは一般的にreplace,strict,ignoreがあり、replaceを取ると乱符号に取って代わる.strictを取ると、文字符号化に問題が発生すると、エラーが発生します.ignoreを取得すると、符号化に問題が発生し、プログラムは無視され、次のプログラム
  • を実行し続ける.

    例:errorsフィールドの使用
    #test.txt    :
    """
    hi he
      
    """
    with open("test.txt","rt",encoding="ascii",errors="ignore") as p :
           print(p.read())
    

    上記の例のファイルはutf-8と符号化されており、テストのためにわざわざ開いている符号化がasciiであることを明記し、errors=「ignore」を使用しないとエラーが報告される.もちろん、ファイルを開くときはできるだけ正しい符号化を使用し、errorsフィールドを使用して符号化問題を処理する必要はありません.
  • print()関数の一般的なパラメータ
  • fileキーワードパラメータは、印刷された出力内容をファイル
  • にリダイレクトする.
  • seqパラメータまたはendパラメータは、デフォルトの区切り文字または行末尾文字
  • を変更します.
    # print           test.txt   
    with open("test.txt","w") as p :
           print("       ",file=p)
    row=["1","2",3]
    print(*row)#1 2 3 
    print(*row,sep=",") #1,2,3
    print(*row,end=",")#1 2 3,
    
  • バイナリとテキストモードのバイナリモードのファイルにテキストデータを読み書きするには、復号および符号化decoding()復号encoding()符号化
  • が必要である.
  • xモード(python 3特有)ファイルが存在しない場合に書き込み、存在する場合はFileExistsErrorエラー
  • と報告する.
    with open("test1.txt","x") as p :
           p.write(111)
    
  • メモリでstrとbytesを操作する方法データの読み書きは必ずしもファイルにあるわけではありません.メモリにもあります.python 3ではioモジュールのStringIO()BytesIO()クラスを参照してください.python 2は少し違います.
  • StringIOはstrに用いられ、メモリにテキストモードのbufferを開き、close()メソッドが呼び出されるとbufferは
  • に回収される.
  • BytesIOはbytesに使用され、StringIO以上で作成されたオブジェクトに似ており、ほとんどの方法の使用方法はファイル操作オブジェクトに似ています.唯一の違いは、ファイルがハードディスク(HDD)に格納、StringIO()BytesIO()で作成されたオブジェクトが読み取ったり書き込むデータがメモリに格納され、メモリがオフになると
  • がデータが失われることです.
    from io import StringIO#python3
    s=StringIO()
    s.write("       ")
    print(s.getvalue())#      
    #         StringIO,     str   StringIO
    f=StringIO("       ")
    print(f.readline())