古澤 久德
国⽴天⽂台天⽂データセンター
2010年2⽉24⽇・IRAF講習

1




スクリプト⾔語のひとつ (Ruby,(R b Perl,P l AWK など）


http://www.python.org/ (Python Software Foundation)

書き換えたら即実⾏。デバッグや再解析も簡単

インタプリタ⾔語なので、コンパイルは不要

欧⽶で、スクリプト⾔語の主流になってきているた
め たくさんの有⽤な機能拡張⽤ソフトウ アが使め、たくさんの有⽤な機能拡張⽤ソフトウェアが使える 実際、多くの天⽂学関係者に浸透しつつある
実際 多くの天⽂学関係者に浸透しつつある

われわれ天⽂研究者にとってはかなり重要なこと
 HST解析ソフトウェアの⼀部 (ACS MultiDrizzle)
 LSST解析ソフトウェア
 すばる望遠鏡MOIRCS MOSデータの解析ソフトウェア
 すばる望遠鏡の次世代観測システム など


2









IRAFの演算エンジンを、スクリプト⾔語Pythonから関の演算 ンジンを スクリプト⾔語 h から関数として利⽤できるようにするためのソフトウェアSTScIが開発をしている stsci pythonという天⽂学研STScIが開発をしている、stsci_pythonという天⽂学研
究⽤ソフトウェアの中の⼀部
http://www.stsci.edu/resources/software_hardware/pyraf

PyRAFだけを単体でインストールして利⽤することができます（IRAFがインストールされていることは必須） 講習会マシンにインストールされているのもこ須）。講習会マシンにインストルされているのもこちらのバージョン。

（この実習では、参加者の理解の促進のために、⽤語の正確さは省き、平素な⾔葉を使うように努めます）
3

サンプルファイルは以下のディレクトリ構成で置かれ サンプルデ タはすべて data/に⼊っています。
れ、サンプルデータはすべてd t /に⼊っています
すでに各ディレクトリに必要最低限のデータが/data/へのシンボリックリンクで置かれています。
誤削除など 困 たら data/を覗いてください
誤削除などで困ったらをくださ sample/disp
mkflatkfl tffield
multiprocessplot
data ＃全デ＃全データが⼊っています
タが⼊っています まず、上記を各⾃の作業ディレクトリにコピーしましょう% cd /adc/data/[ユーザID (guest??) ] ＃各⾃作業⽤
 % cp –rpf /data/furusawa/sample/* .
4以下の解説では、演習に⽤いるファイルのパスをd / mkflat/などで⽰します
disp/、kfl /などで⽰します サンプルスクリプトは、各ディレクトリの中で実⾏すると正しく動くように書かれています 必要なすると正しく動くように書かれています。必要なデータはカレントディレクトリに置きます 各ディレクトリで作業を始める際には、それぞれ各ディレクトリで作業を始める際には それぞれ⼀度ずつmkirafを⾏ってください 演習などでコ演習などでコードを編集などされる際は、disp、ドを編集などされる際は、disp、mkflatなどの各ディレクトリを%cp
p –rpfp dispp my_y_ dispp などのようにコピーして、my_disp内で作業を⾏うとよいかもしれません 必ずしもこのように開発するのが便利なわけではありませんが、実習中の混乱を避けるためです
が 実 中
乱 避

5

お膳⽴てとしてお膳⽴てとして、
 まずは disp/というディレクで（あるいはそれを、各⾃の専⽤ディレクトリにコピーして）作業しましょう % cd disp
 % mkiraf  xgtermをえらびます login(user).cll i () l を編集します

set stdimage=imt4096

起動
 % pyraf＃ Suprime-Camのデータを使うため＃PyRAFを起動します

引数に –n をつけると起動時ポップアップがでない
引数に前回セッションの途中ファイルを指定できる終了
- -> .exit とします
byeや logout は使わない6

eclと同じ感覚で、IRAFのシェルとして使えるcl互換のコマンド呼びだし（!ds9、disp など）ができ、ほとんどの clスクリプトを呼び出すこともできる（ようだ）
メリット
コマンド履歴、コマンド補完の利⽤（tcshと同様の使い勝⼿。
セッションを保存、再開できる）
 Pythonのインタラクティブプロンプトとして使うことができる
 たとえば 1+1 とか、数学関数、forとか 数学関数 for loop、if
loop if ⽂などが使える Help, GUIの強化など。


できないことpackageのアンロードはできない goto⽂はない
 IRAFタスク/clスクリプトのバックグラウンドジョブは使えなIRAFタスク/ lスクリプトのバックグラウンドジョブは使えない （!ds9&などはこれまで通りできます）など
7外部ウインドウ表⽰の機能が強化されている
その⼀例として 。。
 epar imstat
で imstat の解析パラメの解析パラメータを設定し、タを設定し、FITS画像の統計値を測定してみよましょう- -> epar imstat
eparのGUIからヘルプを参照してみましょう

ds9と displayタスクを使って、Suprime-Camのデータを表⽰してみましょう- -> ！ds9！d ＆ （#ds9は先に起動しておきます）（ d は先に起動し おきます）
 - -> display SUPA00207540.fits 1

imexamで天体の形状を調べてみましょう- -> imexam SUPA00207540.fits- -> ds9の画像上で、a, e, j, kなどしてみます。qで終了します
Windowタブからグラフィックウインドウを複数開くこともできます8

PyRAFは、IRAF⽤インタラクティブシェルとしてP
RAFは IRAF⽤インタラクティブシ ルとして使うだけでもメリットがあると⾔えます。しかし、
 PyRAFを使うことのPyRAFを使うことの⼀番の強みは
番の強みは、Pythonスクリ
Pythonスクリ
プトの中で、関数としてIRAFタスクを利⽤できることにあります clやUNIX shellでもIRAFタスクをスクリプトとしてつなぎあわせることは可能ですが、Pythonは、y
⽂字列処
⽂字列処理も強⼒で、すでに他にも多数の有⽤な強⼒
他
多数 有（科学数学演算、可視化など）関数が利⽤できるので それらとPyRAFタスクを組み合わせて解析ので、それらとPyRAFタスクを組み合わせて解析アプリケーションを作ることで、⼤きな恩恵を得ることができます

9

Python関数としてIRAFタスクを呼ぶときは


- -> iraf.display(‘dev$pix’, 1)- -> display dev$pix 1 と同じ意味になります

いくつかパラメータを追加したり変更したりして、動作いくつかパラメータを追加したり変更したりして動作を試してみましょう。作業⽤FITSデータは data/にありますたとえば iraf.display(‘SUPA00207540.fits’, 2) iraf.display(‘SUPA00207540.fits’, 2, fill=1, zscale=0)
 iraf.display(‘SUPA00207540.fits’, 2, fill=True, zscale=True,zrange=False, z1=None, z2=None) iraf.display(image=‘SUPA00207540.fits’, frame=2, zscale=0,zrange=0,0 z1=10000,
1 10000 z2=20000)
2 20000)など。（SUPA*.fitsはSubaru/Suprime-Camのraw dataです）



違うタスクも呼んでみましょう

iraf.imstat(‘SUPA00207540.fits[1000:1100,2000:2100]’)
領域指定も⽂字列の⼀部として渡します10

10個のCCDが5x2のアレンジでに並んでいる 1CCD
1CCD=1FITSファイル
1FITSファイル、1ショット＝10
1ショット＝10 FITS
 ヘッダのDET-IDキーワードまたはファイル名＝SUPA番号の下１桁の数字で どのCCDか＝SUPA番号の下１桁の数字で、どのCCDかを区別できる

http://www.naoj.org/Observing/Instruments/SCam/ccd_mit.html より

11



お膳⽴て
ds9を開きます - -> !ds9 &ds9のメニューから、FrameFrame
ds9のメニューから
FrameFrame ParametersTile Tile
ParametersManual 5x2 [Apply]。Frametile としておきます 作業ディレクトリにある
作業デクト
あ uparm/tvdisply.par （最初に（最初iraf.display を実⾏したときに作られます）の中⾝を⾒て、”frame,i,a,1,1,16,…”という⾏の最後の数字が16,, , , , ,になっていることを確認します。この数字がds9で同時に開けるフレームの個数です。


⼀番単純なPyRAFスクリプト
番単純なPyRAFスクリプト 〜コマンドの羅列disp/dispSUPE0.py

12

繰り返し処理 ((for loop)p) を使ってみましょう disp/dispSUPE1.py （ファイル名はhard-coded）

 Pythonスクリプトyでは、 インデント（字下げ：通常４⽂字）でループや関数のスコープ（作業単位）をあらわ⽂字）プ
数プ（作 単位）
します。C⾔語の{ … } に相当します 変数は宣⾔不要で、気にせず使います
変数は宣⾔不要で 気にせず使います

演習1－1：サンプルスクリプトを書き換えて他のショットを読み込んでみてください FITS名をファイルから読み込んでみましょう disp/dispSUPE2.py
di /di SUPE2
iinput.list li

 ファイルの閉じ忘れなど気にしなくて⼤丈夫です13

FITS名をファイルから読み込む 続き
FITS名をファイルから読み込むー続き このままでは、正しい配置で表⽰されていません

Surime-Camの正しいCCD配置視野周辺では光学系のけられがあるので、視野周辺では円形に暗くなり、左のような光量分布になります。のような光量分布になります CCDの並びを正しくするには input2.lis を使います 演習1-2：別の⼊⼒リストを作って他のショットを表演
作他
表⽰してみましょう14

プログラムを発展させてみましょう

disp/dispSUPE2.py
di/di SUPE2
では CCDの並び順にFITS名をリストしでは、CCDの並び順にFITS名をリストしたinput2.lis をショットごとに毎回準備しなければなりません。
CCDのリストがフレーム番号順に並んでいなくても、正しい配置で表⽰できるようにしてみましょう たとえば、CCD番号（DET-ID)とds9 のFrame番号の組を別のテキストファイル (ccd_arrange.lis) としておいて利⽤できないでしょうか

参考：disp/dispSUPE3.py ― SUPA0020754というコマンド引数を与えると、SUPA00207540.fits – SUPA00207549.fits を表⽰する
 disp/dispSUPE4.py --- 10FITSの名前を書いたリストを与えると、正しい配置で表⽰する
 きっとよりよい⼿法があると思いますで、考えついたらぜひ教えてください。
（さらに物⾜りない⼈へ）ds9との通信を⾏うXPAというツ ルを使うことで、もう少し⾃動化を進めることもツールを使うことで、もう少し⾃動化を進めることもできると思います。Pyds9という、PythonからXPAを利⽤できる外部ソフトウェアがあります15

お膳⽴て：Supirme-Camのデータを練習に使
膳⽴
デ タ 練使いましょう。⼀般にフラット作成はCCD番号（（DET-ID)
ごごとに解析を⾏います。DET解析を⾏す
ID=0 のデータ (バイアス引き算済み:
data/oss_SUPA*0.fits) で作業しましょう
作業 ま やるべき作業を考えてみましょう
1. 各フレームのスカイの⾼さを測り１に規格化する
2. それらをmedianで合成する16



作業をブレークダウンします
1.
2.
3.

これをIRAFのタスクで考えると。。？


1.
2
2.
3
3.


フレーム全⾯でmedianを測る
全を測
その値を変数 に保存
全⾯のピクセル値を そのmedianで割る（規格化）
その di で割る（規格化）（PyRAFコマンドプロンプトで確認してみます）（PRAFコマンドプロンプトで確認してみます）
iraf.imstat(fits, fields=‘midpt’)
ret=iraf.imstat(fits,t i f i t t(fit fi
fields=‘midpt’,ld ‘ id t’ Stdout=1)
Std t 1) ＃返り値
はリストになっていますので、もう⼀⼿必要です
iraf imarith(fits, ’/’,
iraf.imarith(fits,/ , med, outfits)演習

22-11. imstatからmedianの値を受け取り、float値として変数に⼊れてみましょう。まずはPyRAFコマンドプロ
17
ンプトで動作を確かめてください2-2.. 規格化プログラムとしてまとめた規格化プログラムとしてまとめたPythonスクリプト
yt o スクリプトが (mkflat/norm1.py)です。

内容を理解して動作確認してみてください
nrm_*.fitsファイルが存在すると、上書きできない旨のエラーになります。事前に削除しておいてください
M di 測定でシグマクリップ法を使ってみるなどMedian測定でシグマクリップ法を使ってみるなど、独⾃に変更をしてみましょう
2-3.
2
3. dispでの作業を思い出して、ファイル名をリストファイルから取り⼊れるように変更しましょう（参考：mkflat/norm2.py, oss.listが⼊⼒リスト)（発展）余裕のある⼈は、アルゴリズムをコマンドラインで指定したり medianを測る領域を指定できるよンで指定したり、medianを測る領域を指定できるよ
うにしてみましょう （参考：mkflat/norm2ext.py）

18



作業をブレ クダウンします
作業をブレークダウンします
1.
2
2.



規格化済み画像のリストを作成する
それらの画像を合成（スタック）して1枚の画像にする

IRAFタスクで考えると。。
1.
2
2.

Pythonの機能でリストを作成する  fitslist
iraf imcombine(input=fitslist combine=iraf.imcombine(input=fitslist,combine=‘median’median ,output=flatname) ＃形式
fitslist=‘fits1,fits2,fits3,…,fitsn’,,, ,19

演習
2-4. imcombタスクの⼊⼒として渡すための、ファイルリスト(fi li ) を作る箇所をコーディングしてみま
リスト(fitslist)を作る箇所をコ デ ングしてみましょう

思いつく⼿段でよいです。ファイルを１⾏読むごとに思いつく⼿段でよいですファイルを１⾏読むごとに⽂字列をつなぎ合わせていくのでもよいと思います22-55. 作ったリストを⼊⼒値として、画像を1枚のフラットへとスタックしましょう。スタックアルゴリズム
も「外れ値のclippingあり」等に変えてみましょう

注）あらかじめ、先のnorm2.pyなどを⾛らせてnrm_*.fitsをカレントディレクトリに作成しておきます

参考：mkflat/comb1.py
参考20作業１と２でできた解析ソフトウェアをひとつのアプリケーションとして組み上げてみましょう それぞれの作業を関数としておくほうが、ソースそれぞれの作業を関数としておくほうが ソースの可読性もよく、今後の開発効率の⾯でも有利です 関数は def で定義します

関数の名前と引数を⽰した定義を最初に書き、関数の中⾝は⼀段インデントして書きます

mkflat/norm2.py を関数norm()にしてみましょう

参考：mkflat/norm3.py
参考kfl /3
 関数を使うときの都合を考えて、mkflat/norm2.pyでコマンドラインの引数になっていた⼊⼒リストは関数の引数としてあります

21



演習

2-6. mkflat/comb1.pyを同じように関数comb()にしてみましょう。コマンド引数は関数引数に。(参考：mkflat/comb2.py）
2-7. norm() と comb() をつなげてひとつのPythonアプリケー
ション mkflat.py にしてみましょう
参考参考：mkflat/mkflat1.py（第⼀版）,kfl / kfl 1 （第 版） mkflat/mkflat2.py（完kfl / kfl 2 （完成版）, mkflat/mkflat3.py （おまけ） 出⼒ファイルはスクリプト実⾏前に消しておいてください

参考までに% py
python ＃pyrafではなく、⽣のpythonですpypy >>> import norm3 ＃機能拡張ソフトとして読み込みます >>> norm3.norm(‘oss.list‘) #とすると。。？
 こういう使い⽅もできます、という例です
う う使 ⽅も きます と う例 す >>> ^D Pythonは（コントロール＋D）で終了します22

ぜんぜん物⾜りない⼈のための演習課題

 できれば10 CCDをDET-IDを意識することなく⼊⼒し、１コマンドで10 CCDのフラットが完成するようにしたいですよね。どういう追加をすればよいでしょうか？
 その解析結果を、⾃動表⽰してみるというのはいか解析結⾃動表がでしょうか？（さきほどの 10 CCD表⽰プログラムを参考に）
 参考：mkflat/mkflat4.py 実⾏前にds9であらかじめFrame1から10を作ってタイル表⽰しておきます。oss_*.fits 50ファイルを作業ディレクトリにおきます mkflat4.py
mkflat4 py oss.list
oss list flat とすると flat[0-9].fitsflat[0 9] fits が作られます23

せっかくなので、作ったフラットで各OBJECTファイル
せかくなので 作 たフラットで各OBJECTファイルを割ってみましょう（フラットフィールディングと呼び、ピクセル間の感度を補正する操作です）
演習

3-1. ffield.py input.list flat0.fits というようなコマンドで、
flt
flt_oss_SUPA*.fitsというフラットフィールド済み画像を作るプ
SUPA* fit というフラットフィ ルド済み画像を作るプ
ログラムを作りましょう 出⼒ファイルが存在するとエラーになるので、flt_oss_*.fitsは削除しておいてください （慣れてきた⽅は access, imdeleteタス
除しておいてください。（慣れてきた⽅はi d l タス
クなどを使って⾃動削除させるとよいかもしれません）
3-2. ⼊⼒とフラットのFITSヘッダを参照し、FILTER01 キーワー
ドを⽐較しドを⽐較して、異なったらエラーメッセージを出⼒するように異な たら ラ メ セ ジを出⼒するようにしてみましょう 参考：ffield/ffield1.py,/
py ffield/ffield2.py/py24

おめでとうございます。ここまで完了された皆さおめでとうございます
ここまで完了された皆さんは、Web上の情報や参考書などをもとに、⼗分⾃⼒で習得を進めていただけることと思います。
（実際、ググってみると、Pythonによる実験科学プログラミングのtipsはインターネット上に多数ころがっています）がす） ここまでの内容にも、Pythonスクリプト内だから簡単に実現できた作業が多々あるのですが この簡単に実現できた作業が多々あるのですが、このくらいならclで組んだほうが早いや、という⽅もいらっしゃるかもしれません ここからは、Pythonならではの機能も使ってみましょう

25







近年のPCには、複数のコアを持つCPUが搭載されているものが珍しくなくなりました。⼤量にデータ処理する際に、この特性を⽣かしたいものですPython2 6 の multiprocessingという機能拡張ソフトウェア
Python2.6（モジュール）を使うと、Pythonの⼦プロセスを簡単に⾃動で複数個起動し、独⽴な繰り返し作業などを効率的に⾏えます
参考：ffield/ffield3.py

多重起動するべきプロセスの個数を設定する
複数のPythonの中で並列に実⾏したい関数と それぞれのプロセス複数のPythonの中で並列に実⾏したい関数と、それぞれのプロセスで使われる関数の引数を⼊⼒リストとしてあたえる演習（注！Solarisで動作確認済。LinuxではPyRAFタスクとの相性で動作しないことがあります）

4-1. Pythonの⼦プロセス起動個数を変えてみて、topコマンドなどで、実際に指定の個数だけPythonが起動することを確かめてみましょう。
余裕がある⽅は、さきほどのnorm()などをマルチプロセス化するなど、()応応⽤を試されるとよいでしょう。
試26

➀

起動
親Python②⼦Python

終了を待たない⼦Python

function(infits2, argument2)
終了を待たない③
起動

function(infits1, argument1)

⼦Pythonfunction(infits3, argument3)

Pool (⼦の数)  map (関数と引数）
function(( [(infits1, argument1), 引数の組み合わせのリストを与えると、(infits2, argument2), それぞれの組が別々のPythonで関数functionの引数として使われるわけで(i fi 3 argument3),(infits3,3) す…] )27

Pythonには、スクリプト中の変数値などを⽤いて簡単にプロットを作成できる拡張ソフトウェアがあります。
りMatplotlib http://matplotlib.sourceforge.net/
 Gnuplot.py
p py http://gnuplot-py.sourceforge.net/
p //g p py
g/ などMatplotlibを⽤いて、フラット済み画像の結果簡易チェックツールを作ってみましょう 作業項⽬をブレークダウンします

画像の上下２領域の⾼さを測り、両者が何％異なるかを求める
 その値をグラフに表⽰する


参考 plot/check_ff.py

28



演習

5-1. たとえば統計値を取るメッシュを増やして最⼤・最⼩値の差（peak to peak difference）がスカイレベルの何％にあたるか表⽰してみましょう
5-2. 横軸をデータのEXPTIMEなど、サンプルコードのフレーム番号とは別の値を軸にとりなおしてプロットできるでしょうか
余裕がある⽅： peak-to-peak差に加えて、スカイ⾼さのばらつきの標準偏差がスカイレベルの何％にあたるかなども表⽰してみましょう Pythonだけでコーディングするのは少し⾯倒かもしれませんが、import math 、math.sqrt() などを使えます 参考：plot/check_ff2.py、plot/check_ff3.py
参考：plot/check ff2 py plot/check ff3 py (NumPyを使⽤）

ここではMatplotlibの関数を細かくは述べませんので、p⽤途に応じて機能を調べるようにされるとよ で⽤途に応じて機能を調べるようにされるとよいでしょう
29





今回は、PythonとPyRAFタスクによるスクリプティン
yyグ
グとはどういうものか、という説明に注⼒しましたの
どで、PyFITSについてはご紹介のレベルにとどめます
PyFITS

http://www.stsci.edu/resources/software_hardware/pyfits
Pythonにおける、FITSIO/CFITSIOに相当するもので、FITSデータを読み書きデタを読み書き、またピクセルデまたピクセルデータとヘッダ（HDU）の加タとヘッダ（HDU）の加⼯などができる関数群が使える追加ソフトウェアです。
 PyRAFと同様にSTScIのstsci_pythonの⼀部であり、PyRAFとは独⽴の独⽴です PyFITSを⽤いたコーディングでは、ピクセルデータの操作にNumPyを利⽤します

NumPy


http://numpy.scipy.org/
配列の操作をメインとした数学・科学⽤関数をPythonから利⽤できるようにする機能拡張ソフトウェアです（バックエンドはCなどで実装されていて⾼速）
30



メリット

 PyFITSはIRAFに依存しないので、軽量にプログラムを組むことができ、IRAFタスクに存在しないアルゴを組むことができ
IRAFタスクに存在しないアルゴ
リズムや操作を⽐較的簡単に開発できます プログラム配布時など、IRAFが⼊っているシステムは限られるが、PyFITS＋NumPyなら壁が低いかも NumPyの強⼒な配列操作関数を使うことで、ピクセルデ タの操作を⽐較的容易に⾏えます またルデータの操作を⽐較的容易に⾏えます。また、NumPyの強⼒な数学関数もあわせて利⽤できますデメリット

 ある程度、解析タスクをPythonの枠組みで独⼒で開発するための知識と経験が必要となります（⽇常の発知識 経験要り
（ 常研究⽣活で便利に使うというレベルなら、ちょっとした努⼒でOK）
31

さきほど作った mkflat/mkflat2.pyをPyFITSを使っkfl t/ kfl t2 をP FITSを使って書きかえてみます 各IRAFタスクはおおむね次のように書き換えられます。もちろん、PyRAFとの混合もできます

FITSデータのHDUからピクセルデータとヘッダ情報を取得
ピクセルデ タ配列を演算 操作し 結果のピクセルデピクセルデータ配列を演算・操作し、結果のピクセルデータ配列を⽣成
 結果をFITSデータとして書き出し
 この⽅法がベストというわけではないですが。


参考： kfl t/ kfl t2 fit
参考：mkflat/mkflat2pyfits.pyどうしても気になる⼈は、 mkflat2.pyで作ったフラットとmkflat2pyfits.pyで作ったフラットを割り算してみましょうyy

⽐較的簡単に同等の解析プログラムを組めることがわかっていただければよいです32

mathモジュールmathモジュル（モジュ（モジュール＝機能拡張ソフトウェア）
ル 機能拡張ソフトウェア）
datetimeモジュール

⽂字通りFTPプロトコルを扱えます。データ転送は観測の⼀環でもあります。存在を知っておいて損はないですre モジュール
モジル




⽇時の⾜し引きや、⽂字列フォーマットを扱えます。観測は時間との戦いですから、結構使う機会があるかもしれません

ftplibモジュール
ftplibモジュル

基本的な数学関数群です

正規表現です。⽂字列操作関数だけで⾏き詰まったら考慮するとよいでしょう

上記はPythonのデフォルトでインストールされますほか

いいモジュールを⾒つけたら（作ったら）ぜひ教えて下さい33

PythonとPyRAFの使い⽅を浅く取り上げましたのP
th とP RAFの使い⽅を浅く取り上げましたので、不明な点も多いと思います。なんとかなりそうだな、便利かもしれない、という感触を少しでも持持ってもらえたらば、幸いです。
もら たらば 幸す

今回はClassなど、オブジェクト指向⾔語としての使い⽅には触れていません。興味をもたれたら挑戦されるとよいと思います。

Pythonによるデータ処理には得⼿不得⼿の⾯があるので 上⼿に他のソフトウェアと組み合わせてプるので、上⼿に他のソフトウェアと組み合わせてプログラムを作るとよいでしょう
たとえば⼊出⼒ファイルのリスト⽣成や結果の評価などを
Pythonの機能を使って、h の機能を使 ピクセルごとに演算を繰り返すような作業はPyRAFのタスクや、NumPyの数学関数など。。といったアプローチyがあり ますがありえます

34

ファイルから⼀⾏ずつ読み出すfor line in open(filename): ＃ファイルの最後まで繰り返し
line=line.strip() ＃⾏頭⾏末の空⽩・改⾏⽂字を削除
line=line.rstrip(‘,’) ＃⽂字列右端の’,’を削除
右line=line.split() ＃空⽩⽂字で分割
val_col1=line[0]_[ ]val_col2=line[1] …

⽂字列の操作

数値に変換、数値を⽂字列に変換数値に変換
数値を⽂字列に変換
 val_int=int(string) val_float=float(string) val_string=str(val_numeric)l tit( li )

コマンドラインから引数の値を取得する

hikisuu1=sys.argv[1]yg [ ]
argc = len(sys.argv) ＃関数len()はリストの項⽬数を返す
35



リストをつくり、値を追加していく

a=[] ＃空のリストを作っておいて a.append(new_value) ＃値を追加していきます a.sort()a sort()＃ リストをソートします print a[0]＃できたリストの第１要素を表⽰します print a[-1] ＃リストの最終要素を表⽰します print a[0:5] ＃ １から５要素⽬（index=0,…,4) を表⽰します ‘ ,‘.join(a)＃ ’,’を境界⽂字として要素を連結し⽂字列にします リストの他に、タプル（内容の変更付加）、辞書（キリストの他に、タプル（内容の変更付加）、辞書（キーとその値とその値のペア、追加は可、順序は不定）などのコンテナ組み込み型があります“困ったときの”system関数もあります
困ったときの system関数もあります
import os os.system(command_line_string)
y(g)
36



便利なループ処理>>> a=[‘nausicaa’, ‘kiki’, ‘fio’,’sophie’, ‘sheeta’]>>> forf r indx,
ind ccdname
dn m in enumerate(a):num r t ( )print indx, ccdname.. 0 ‘nausicaa’.. 1 ‘kiki’ …
>>> b={‘kaze’:’nausicaa’, ‘majo’:’kiki’ , ‘buta’:’fio’]>>> for keyword, heroine in b. iteritems():
printi t kkeyword,d hheroinei… ‘kaze’ ‘nausicaa’… ‘majo’ ‘kiki’… ‘buta’‘b ’ ‘fio’‘fi ’

使える関数が分からなかったら？
% python
 >>> a=[] >>> dir(a) >>> help(a)＃リストに付随する関数の情報
>>> import math>>> dir(math)>>> help(math)p()＃mathモジュールに付随する関数の情報

37