Python (ファイル入出力)
ファイル入出力
ファイル入出力に使用するメソッドは以下の通りです。
- open(ファイル名, モード)
- ファイル名のファイルをモードにしたがって開いて、ファイル記述子を返します。
- 'r'
- 読み込み専用
- 'w'
- 書き込み専用
- 'a'
- ファイルの末尾に追加
- 'r+'
- 更新(読み取りと書き込み)
- 'w+'
- ファイルを空にして、そのファイルを読み書き用に開く
- 'a+'
- ファイルを読み書き用に開いて、ファイルの末尾に追加
- 'b'
- ファイルをバイナリモードで開く
(他のオプションと一緒に使用)
- read()
- ファイルのデータをすべて読み込みます。
返り値は、文字列です。
- read(n)
- ファイルのデータをnバイト分読み込みます。
- readlines()
- ファイルのすべての行を読み込んで、リストにして返します。
- readline()
- ファイルの 1 行分を読み込んで文字列で返します。
- write(s)
- 文字列またはリスト s をファイルに書き込みます。
- close()
- ファイルを閉じます。
ファイル入出力の例 (テキストファイル)
スクリプト起動時に、コマンドライン引数で指定されたファイルから、
1 行づつ読み込んで処理をするスクリプトです。
- 以下のスクリプトを、cat.py というファイル名で保存します。
import sys
fp = open(sys.argv[1], 'r')
for line in fp.readlines():
print line
fp.close()
- 以下の様に実行するとファイル tmp.txt の内容が表示されます。
# python cat.py tmp.txt
スクリプト解説
import sys
- sys モジュールをインポートします。
コマンドライン引数を扱うために必要です。
fp = open(sys.argv[1], 'r')
- コマンドライン引数の 1 番目 sys.argv[1] に入っているファイル名を読み込み専用で開きます。
ファイル記述子が fp に代入されます。
for line in fp.readlines():
- fp から 1 行づつ読み込んで line に代入し、for 文を1回づつ実行します。
fp.close()
- fp を閉じます。
練習問題
- Maya の Obj ファイルを読み込んで、ポリゴンオブジェクトを原点中心にX,Y,Z方向に2倍にスケールして出力できるようにしてみましょう。
読み込むファイル名は、コマンドラインで指定します。
例えば、以下のように実行するとcube1.objの頂点座標が原点中心に2倍されたデータがcube2.objに出力されます。
# python scale.py cube1.obj cube2.obj
cube1.obj
cube2.obj
cube1.obj のObjデータ
cube2.obj のObjデータ
Obj ファイルフォーマット
#
- # から行末までコメントです。
mtllib マテリアルファイル名
- マテリアルデータを記述したファイル名です。
g グループ名
- グループの名前です。
次のg、またはファイル末尾までが1つのグループです。
グループ名が無いと、全体が一つのグループになります。
usemtl マテリアル名
- このグループが使用するマテリアル名を指定します。
マテリアル名は、マテリアルファイルに記述してあります。
v X Y Z
- 頂点の座標値です。
vt U V
- テクスチャの座標値です。
vn X Y Z
- 法線ベクトルの値です。
f 頂点座標値番号/テクスチャ座標値番号/頂点法線ベクトル番号 ...
- フェイスの情報です。
3つの数値が / を区切りとして並びます。
この3つの数値が、フェイスの数だけ並びます。
各番号は、1 から始まります。
テクスチャ座標値番号と頂点法線ベクトル番号は、省略可能です。
参考
Prev
index | home
abetmhr@gmail.com