ファイルの入出力

ファイルのopenとclose

ファイルをオープンするにはopen関数、クローズするにはcloseメソッドを使う。

f = open("sample.txt", "r")
(何らかの処理)
f.close()

openの戻り値はファイルオブジェクトで、ファイルへの入出力にはこのファイルオブジェクトを使う。
2番目の引数はモードで次のモードが指定できる。

r 読み込みモード
w 書き込みモード。既存のファイルには上書きする
a 追加書き込みモード

ほかにもあるけど省略。

ファイルの読み込み

ファイルの内容すべてをいっぺんに読み込むには、readメソッド。

import sys

filename = sys.argv[1]

file = open(filename, "r")
contents = file.read()
print contents
file.close()

実行結果:

^o^ > type sample.txt
Mon
Tue
Wed
Thu
Fri
Sat
Sun

^o^ > python file_read.py sample.txt
Mon
Tue
Wed
Thu
Fri
Sat
Sun


ファイルを1行ずつ読み込むには、readlineを使う。

import sys

filename = sys.argv[1]

file = open(filename, "r")
while True:
    line = file.readline()
    if not line:
        break
    print line.rstrip("\n")

file.close()

whileループの中で1行ずつ読み込んで出力している。ファイルの最後に到達すると空文字列が返ってくるんだろうか、そこでbreakしてループを抜け出している。
あと、print文は最後に改行を出力するので、lineの最後についている改行文字をrstripで取り去っている。このprintの改行を出力する動作はおせっかいに思えてならない。

readlinesはファイルすべてを行ごとに分割して、文字列のリストを返す。

import sys

filename = sys.argv[1]

file = open(filename, "r")
for line in file.readlines():
    print line.rstrip("\n")

file.close()

大きなファイルでなければこの方がすっきり書ける。

さらに、readlinesを使わなくてもファイルオブジェクト自体をforに渡すことで、1行ずつ処理することができる。このやり方だと大きなファイルでも大丈夫みたい。

import sys

filename = sys.argv[1]

file = open(filename, "r")
for line in file:
    print line.rstrip("\n")

file.close()

ファイルへの書き込み

ファイルへの書き込みは、writeメソッド。

import sys

filename = sys.argv[1]

file = open(filename, "w")
file.write("Hello, world.\n")
file.close()

実行結果:

^o^ > python file_write.py sample.out
^o^ > type sample.out
Hello, world.

writeメソッドは余計な改行文字を出力しないから素直でいいね。

writelinesは文字列のリストを受け取って、ファイルに出力する。

import sys

filename = sys.argv[1]

seq = ["foo\n", "bar\n", "baz\n"]

file = open(filename, "w")
file.writelines(seq)
file.close()

実行結果:

^o^ > python file_writelines.py sample.out
^o^ > type sample.out
foo
bar
baz

コメントを残す

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

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