# 23 `distutils.text_file` -- TextFile クラス

このモジュールは `TextFile`クラスを提供します。これはテキストファイル へのインタフェースを提供し、コメントの削除、空行の無視、バックスラッシュ での行の連結を任意に行えます。

クラス `TextFile`( | [filename=`None`, file=`None`, **options])

  このクラスはファイルのようなオブジェクトを提供します。 これは行指向のテキストファイルを処理する時に共通して必要となる処理を行 います: (`#`がコメント文字なら)コメントの削除、空行のスキップ、 (行末のバックスラッシュでの)改行のエスケープによる行の連結、 先頭/末尾の空白文字の削除。 これらは全て独立して任意に設定できます。

  クラスは`warn()`メソッドを提供しており、物理行つきの警告メッセー ジを生成することができます。この物理行は論理行が複数の物理行にまたがっ ていても大丈夫です。 また`unreadline()`メソッドが一行先読みを実装するために提供されています。

  `TextFile`のインスタンスはfilename、file、またはその 両方をとって作成されます。 両方が `None` の場合 `RuntimeError` が起きます。 filenameは文字列、fileはファイルオブジェク ト(または`readline()`と`close()`のメソッドを提供する何か) である必要があります。 `TextFile`が生成する警告メッセージに含めることができるので、 filenameを与えることが推奨されます、 もしfileが提供されなければ、 TextFile は組み込みの open() を利用して自分で作成します。

  オプションは全て真偽値で、readline()で返される値に影響します。

  オプション名 | 説明 | デフォルト値
  --- | --- | ---
  <オプション名>strip_comments | バックスラッシュでエスケープされていない限り、"`#`"から行末 までと、"`#`"の先にある空白文字の並びを削除します。 | true
  <オプション名>lstrip_ws | 行を返す前に先頭の空白文字の並びを削除します。 | false
  <オプション名>rstrip_ws | 行を返す前に行末の空白文字(改行文字を含みます!)の並びを削除します。 | true
  <オプション名>skip_blanks | コメントと空白を除いた*あとで*内容がない行をスキップします。 (もし lstrip_ws と rstrip_ws がともに偽なら、空白文字だけの行があるか もしれません。これはskip_blanksが真でない限りスキップされません。) | true
  <オプション名>join_lines | もしコメントと空白文字を削除したあとで、バックスラッシュが最後の改行文 字でない文字なら、次の行を接続して一つの論理行とします: N行の連続した行がバックスラッシュで終わる場合、N+1 行の物理行が1行の論 理行として扱われます。 | false
  <オプション名>collapse_join | 前の行と接続するとき、行頭の空白文字を削除します。"`(join_lines and not lstrip_ws)`" の時だけ意味をもちます。 | false

  rstrip_wsは行末の改行を削除するので、`readline()`のセマン ティクスが組み込みファイルオブジェクトの`readline()`メソッドと は変わってしまいます! 特に、 rstrip_ws が真で skip_blanks が偽のとき、 `readline()` はファイルの終端で`None`を返し、空文字 列を返したときは空行(または全て空白文字の行)です。

  `open`( | filename)

    新しいファイルfilenameを開きます。これはコンストラクタ引数の fileとfilenameを上書きします。

  `close`( | )

    現在のファイルを閉じ、(ファイル名や現在の行番号を含め)現在のファイルに ついての情報を全て消します。

  `warn`( | msg[,line=`None`])

    標準エラー出力に現在のファイルの論理行に結びついた警告メッセージを出力 します。 もし現在の論理行が複数の物理行に対応するなら、警告メッセージは以下のように全体 を参照します: "`"lines 3-5"`"。 もし line が与えられていれば、 現在の行番号を上書きします; 物理行のレンジをあらわすリストまたはタプル、 もしくはある物理行をあらわす整数のどれでも与えられます。

  `readline`( | )

    現在のファイル(または`unreadline()`で''unread''を直前に行ってい ればバッファ)から論理行を1行読み込んで返します。もしjoin_linesオ プションが真なら、このメソッドは複数の物理行を読み込んで接続した文字列 を返します。 現在の行番号を更新します。そのため`readline()`のあとに `warn()`を呼ぶと丁度読んだ行についての警告を出します。 rstrip_wsが真で、strip_blanksが偽のとき空文字列が返るので、 ファイルの終端では`None`を返します。

  `readlines`( | )

    現在のファイルで残っている全ての論理行のリストを読み込んで返します。 行番号を、ファイルの最後の行に更新します。

  `unreadline`( | line)

    line(文字列)を次の`readline()`用に、内部バッファにpushし ます。行の先読みを必要とするパーサを実装する時に便利です。 `unreadline`で``unread''された行は`readline`で読み込む際 に再度処理(空白の除去など)されません。 もし`unreadlinee`を、`readline`を呼ぶ前に複数回実行する と、最後にunreadした行から返されます。