Python/ファイルの書き込みと読み込み

出典: フリー教科書『ウィキブックス(Wikibooks)』
ナビゲーションに移動 検索に移動

ファイルへの書き込み[編集]

ファイルを書くにも読むにも、まず、そのファイルを開く必要がある。ファイルを開くには、組み込み関数 open() を使うことで、ファイルを開ける。

さて、これから、ファイルの作成をしたいわけだが、ファイルを作成することも、pythonでは、ファイルを開く作業として扱われるので、open()でファイルを作成できる。もしopen()をするときに、その名前のファイルがなければ、pythonが自動的に、その名前のファイルを作成してくれる。

iremono = "tukuru.txt"
ire = open(iremono, "w" )
ire.write("hello")
ire.close()


open()の2番目の引数にある「"w"」は、「書き込みモード」という意味である。(なお、"r"にすると、読み込みモードになる。とりあえず、いま使うのは、書き込みモードなので、第2引数は「"w"」にして開く。)

open()の書式は、

open(ファイルの名前や場所, モード )

である。

ファイルに書き込みをするには、書き込みモードで開いたフォイルに、組み込み関数 write() で書き込みをできる。

そして、さいごにファイルを組み込み関数 close() で閉じることで、完了である。

ホームフォルダを見ると、「tukuru.txt」という名のファイルが作成されており、開くと「hello」と書いてあるはずだ。

上記のコードで、「iremono」とか「ire」とか「tukuru」とかは勝手に名付けた名前なので、読者の好きなように名前を変えて、かまわない。


open()は、次のように、してもいい。

ire = open("tukuru.txt", "w" )
ire.write("ohayo")
ire.close()

ファイルからの読み込み[編集]

ire = open("tukuru.txt", "r" )
s = ire.readline()
print("閉じる前",s)
ire.close()
print("閉じた後",s)

ファイルの内容を読み込むためには、まず、モードを読み込みモードにして、ファイルを開く必要がある。

読み込みモードで開くには、open()の第2引数を「"r"」にすれば良い。

そして、組み込み関数 readline() によって、ファイルを1行ずつ読み込むことができる。(なお、すべての行を読み込むには 複数形の「readlines()」を使う。しかし今は使わないので、説明を省略する。もし、ファイルサイズが大きい場合に、readlinesですべての行を読み込むと、メモリを大量に使用してしまうので、あまり使用しないほうが安全である。複数形のほうについては、のちのページで、詳しくは後述する。)

読み込んだだけでは、何も表示しないので、print関数などで読み込み内容を表示することになる。

上記のコードを実行すると、下記のような実行結果になる。

閉じる前 ohayo
閉じた後 ohayo

上記のコードでは変数sに読み込み内容をコピーしてあるのでファイルを閉じても、内容は残る、

なお、ファイルをclose()で閉じたときに、ire.readline()の情報は失われている。なので、もしire.readline()を、close()した後に、printなどで表示しようとすると、エラーになる。

その例を、次のコードで見よう。


(エラー。×)

ire = open("tukuru.txt", "r" )
print("閉じる前",ire.readline())
ire.close()
print("閉じた後",ire.readline())

のようなコードにして実行すると、「閉じた後」の行でエラーになり、中断してしまう。

つまり、ファイルをclose()で閉じると、その閉じる前にreadline()で読み込んだ情報は、失われる。


いっぽう、下記コードのように、close後にreadline()しなければ、プログラムを実行してもエラーにならない。

(実行できる。◯)
ire = open("tukuru.txt", "r" )
print("閉じる前",ire.readline())
ire.close()



複数行の読み込みをテストする前に、まず、マウスをつかってtukuru.txtの内容を、下記のように書き換えよう。

あいうえお
かきくけこ
さしすせそ

そして、次のコードを実行してみよう。

ire = open("tukuru.txt", "r" )

print("1回目: ",ire.readline())
print("2回目: ",ire.readline())
print("3回目: ",ire.readline())
print("4回目: ",ire.readline())

ire.close()

実行すると、

1回目:  あいうえお

2回目:  かきくけこ

3回目:  さしすせそ

4回目:  

のように表示される。


このように、readline()は、実行するたびに、次の行を読み込みに行く。そして、最後の行まで読み終わったら、それ以上は読み込まない。