Python(ファイル処理とwith構文)

ファイルの読み書きを行う場合、定められた手順に沿ってプログラムを書く必要があります。
1.ファイルを開く open()
2.ファイルを読み書きする read()、write()
3.ファイルを閉じる close()
# ファイルの読み書き<手順に注意>

# 1. ファイルを開く
#a_file = open("test.txt",encoding = "utf-8")
#a_file = open("test.txt",mode="w",encoding = "utf-8")
a_file = open("test.txt",mode="a",encoding = "utf-8")

# 2. ファイルを読み書きする
try:
    #s= a_file.read()
    a_file.write("hoge\n")
    a_file.write("1234\nあああああああああああ\n")
    a_file.write("/*-\n")
    
# 3. ファイルを閉じる
finally:
    a_file.close()

#print(s)
encodingの引数で、文字エンコーディングをShift_JISにする場合は"sjis"に変更します。 mode引数には書き込みモード"w"読み込みモード"r"(デフォルト)、追記モード"a"バイナリモード"b"テキストモード"t"(デフォルト)を指定することができます。 modeやencodingは名前付き引数で、引数の順番が前後しても大丈夫です。 また、ファイルの読み書きを行う場合、ファイルを読み込んでいる途中で、別の誰かがファイルを削除してしまうこともありえるので、例外処理try...finally...を用いて記述する必要があります。
with構文
# with構文で自動的にclose()を呼ぶ
with open("test.txt",mode="w",encoding="utf-8") as f:
    f.write("I'm happy\n")
    f.write("But I'm sad\n")
try...finally... を使うことなく、自動的に処理の最後にclose()メソッドを呼んでくれます。
テキストファイルを1行ずつ処理
# テキストファイルを1行ずつ処理
#with open("test.txt",encoding="utf-8") as f:
#    for line in f:
#        print(line)

# テキストからキーワードを探す
key = "sad"
with open("test.txt",encoding="utf-8") as f:
    for i,line in enumerate(f):
        if line.find(key)>=0:
            print(i+1,":",line)
open()メソッドの戻り値をfor構文に与えると、テキストファイルの内容を1行ずつ表示できます。
1行ずつ読むことの利点は、メモリに記録できる量に限りがあり、巨大なデータは読み込みエラーになってしまうことを回避できることです。 enumerate()関数イテレータのインデックス番号と要素の値を得ることができます。 文字列にはfind()メソッドがあり、これは0から数えて何文字目に検索文字列があるのかを返し、見つからなければ-1を返します。

Pythonのオブジェクトや変数を保存

上記のテキストファイルを読み書きする方法は、文字列を読み書きする方法でした。
リストや辞書など複雑なデータを保存するのに便利なのがJSON形式です。
import json

data={"no":5,"code":("jas",1,19),"scr":"hello"}

filename = "test.json"
with open(filename,"w") as fp:
    json.dump(data,fp)

with open(filename,"r") as fp:
    r = json.load(fp)
    print("no=",r["no"])
    print("code=",r["code"])
    print("scr=",r["scr"])
jsonモジュールを利用することで以下の関数を利用することができます。
※fpはopen()関数の戻り値を指定
関数説明
json.dumps(obj)オブジェクト(obj)をJSON文字列に変換
json.loads(json) JSON文字列をPythonのオブジェクトに変換
json.dump(obj,fp) オブジェクト(obj)をJSON形式でファイル(fp)に保存
json.load(fp) JSON形式のファイル(fp)からデータを読み出す

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Python

前の記事

Python(ユニットテスト)