ファイルアクセス
ファイルを開くときには組み込み関数 open を使用する。
開くときにはモードを指定できる。省略時はテキスト読み込みモードになる。
open はファイルオブジェクトを返し、開く以外のファイル操作は
ファイルオブジェクトの関数を利用する。
f=open("readme.txt") # テキスト読み込み print f.readline() # 一行読み込んで表示 print f.tell() # 現在の読み込み位置を取得して表示 f.seek(0, 0) # ファイルの先頭に戻る f.close() # ファイルを閉じる f=open("readme.txt", "wb") # バイナリ書き込みモード f.write("test text\n") # 文字列を書き込む f.close() # ファイルを閉じる
補足:モジュールの利用
Python では標準ライブラリなどをモジュールとして提供している。
モジュールを利用するためには import する。
import の形態には以下のようなものがある
import sys # sys モジュールを利用可能にする from os import path # os モジュールから path を取り込む from csv import * # csv モジュールに含まれる全てを取り込む import StringIO as sio # StringIO モジュールに sio という別名をつけて利用可能にする # 以上の import の結果以下のような利用が可能になる p=path.join("dir", "file.csv") # os.path.join に左の形式でアクセスできる r=reader(open(p)) # csv.reader にモジュール名の csv を省略してアクセスできる buf = sio.StringIO() # StringIO.StringIO に左の形式でアクセスできる sys.exit(0) # sys モジュールの関数に左の形式でアクセスできる
補足:ポリモーフィズム&ファイル風オブジェクト
C++ や Java のオーバーライドと違って、(C++ で言うところの)シグネチャ*1が一致すれば
関数は利用可能である(継承などは必要ない)。
変数の型が無いので最低限関数名と引数の数が合致すれば良い。
StringIO モジュールの StringIO はファイル風オブジェクトを返す。
このファイル風オブジェクトはファイルと同じインターフェースを持ち、
メモリ上にその内容を保持する。
import sys from StringIO import StringIO # 関数定義 def copy(src, dst, tmp): src=open(src) for text in src: tmp.write(text) src.close() tmp.seek(0, 0) dst=open(dst, "w") for text in tmp: dst.write(">%s"%text) dst.close() # StringIO を利用 buf=StringIO() copy(in_file, out_file1, buf) # 読み書き両用で開いたファイルを利用 buf=open(tmp_file, "w+") copy(in_file, out_file2, buf) buf.close()
というようにメモリ上に置く一時ファイルといった使い方が出来る。
また上記コードの tmp は読み書き両用で開いたファイルオブジェクトと容易に
交換が可能である。
*1:関数名と引数の型、数、戻り値の型の組み合わせによる関数を一意に識別するためのもの