2.1.7.8 ファイルオブジェクト
ファイルオブジェクトはCのstdioパッケージを使って実装され、以下の組み込み関数の章で説明しているopen()組み込み関数により生成されます。
ファイルオブジェクトは他の組み込み関数およびメソッド、例えばposix.popen()、posix.fdopen()、ソケットオブジェクトのmakefile()メソッドによっても返されます。
I/O関連の理由でファイル操作が失敗すると、例外IOErrorが発生します。
これには操作が何らかの理由で定義されていないような状況(ttyデバイスに対するseek()や読み出し用に開かれているファイルに対する書き込みのような)も含んでいます。
ファイルには以下のメソッドがあります。
- close ()
-
ファイルを閉じます。閉じられたファイルはもう読んだり書いたりできません。
- flush ()
-
内部バッファをstdioのfflush()と同じように書き出します。
- isatty ()
-
ファイルがtty(のような)デバイスに接続されているときは1を返し、そうでないときは0を返します。
- fileno ()
-
OSにI/O操作を依頼するための低レベルの実装で使われている整数の「ファイルディスクリプタ」を返します。これはファイルディスクリプタを使う他の低レベルインタフェース、例えばfcntlモジュール、os.read()とその仲間を使うときに役立ちます。
- read ([size])
-
ファイルから最大sizeバイト(EOFを検出したり、パイプやttyなどのデバイス
からすぐに利用できるデータがこれ以上無いときはそれより少ないバイト)を読み出し
ます。size引数が負か省略されたときは、EOFに達するまですべてのデータを
読み出します。バイト列は文字列オブジェクトとして返されます。
すぐにEOFに達すると空文字列が返されます。(ttyのような特定のファイルに対しては
EOF検出後にさらに読み続けることは意味があります。)
- readline ([size])
-
ファイルから1行読み出します。最後の改行文字は文字列に含まれています。
2.6
(しかし不完全な行でファイルが終っている場合には無いかも知れません。)
負でないsize引数が指定さた場合は、それが最大バイト数(最後の改行を含む)
となり不完全な行が返されるかも知れません。
すぐにEOFに達すると空文字列が返されます。
注:stdioのfgets()と違って入力中にあればヌル文字
('\0')を含んだ文字列を返します。
- readlines ([sizehint])
-
readline()を使ってEOFまで読み出して、読んだ行を含むリストを返します。オプションのsizehint引数があればEOFまで読む代わりに、全行の合計で大体sizehintバイト(多分内部バッファサイズで切り上げ)になる行を読み出します。
- seek (offset, whence)
-
stdioのfseek()のようにファイルの現在位置を設定します。
whence引数はオプションでデフォルトは0(ファイルの絶対位置)です。
whence引数の他の値には1(現在位置に対する相対位置)と2
(ファイルの終端に対する相対位置)があります。戻り値はありません。
- tell ()
-
stdioのftell()のようにファイルの現在位置を返します。
- truncate ([size])
-
ファイルサイズを切り詰めます。オプションのsize引数があれば、ファイルは(最大でも)そのサイズに切り詰められます。サイズは現在位置には無関係です。
この関数が利用できるかどうかはOSのバージョンに依存しています。(例えば、すべてのUnixバージョンがこの操作をサポートしているわけではありません。)
- write (str)
-
文字列をファイルに書き出します。戻り値はありません。
注:バッファリングの関係で、文字列はflush()またはclose()
メソッドが呼ばれるまではファイルには実際には書かれないかも知れません。
- writelines (list)
-
文字列のリストをファイルに書き出します。戻り値はありません。
(名前はreadlines()に対応しています。writelines()は行区切りを付加しません。)
ファイルオブジェクトは以下の属性も提供しています。
- closed
-
ファイルオブジェクトの現在の状態を示すブーリアン値です。これは読み出し専用の
属性で、close()メソッドがこの値を変更します。
- mode
-
ファイルに対するI/Oモードです。open()組み込み関数を使ってファイルオブジェクトが生成されたときは、mode引数の値になります。これは読み出し専用の属性です。
- name
-
ファイルオブジェクトがopen()を使って生成されたときは、
ファイルの名前になります。それ以外は、ファイルオブジェクトのソースを示す
"<...>"形式のなんらかの文字列になります。
これは読み出し専用の属性です。
- softspace
-
print文を使うとき他の値の前に空白文字を印刷する必要があるかどうかを
示すブーリアン値です。
ファイルオブジェクトをシミュレートするクラスは書き込み可能なsoftspace
属性も持たせて、0に初期化しておくべきです。
これはパイソンで実装されたクラスに対しては自動的に行なわれます。Cで実装された
タイプは書き込み可能なsoftspace属性を提供しなければなりません。
guido@python.org