作者: 機械伯爵
日時: 2005/12/5(01:49)
<前回07hの追加分>
    ☆   ☆   ☆

 翌日、月曜日。
 遅刻ぎりぎりで現れた美央は、目を赤く腫らしていた。
「どうしたの、木崎」
 STが終わった後、巽は美央の席に近づいて聞いた
「くちなわくん?」
 半ばぼーっっとしながら、美央は巽を見上げる。
「なんかあったの?」
「おおとりせんぱいが………」
「翔子?」
「おおとりせんぱいが、あたしと………」
「?」
「あ、あ、そんな………あああっ………」
 巽に判る筈がない。
 昨日の妄想が暴走を重ね、翔子と巽のペアから巽と美
央のペアに移り、最後にどこにどう間違ったのか、美央
と翔子のペアに回ったところでうかつに寝てしまい、と
どまるところを知らない無意識のリビドーが爆走し、真
夜中に飛び起きた時には取り返しの付かないダメージを
受けていたのだ。
 無論、それから眠れなかった。
「具合悪いんだったら、保健室行きなよ」
「ほけんしつ?」
「事情は知らないけど、寝不足だろ? 保健室で寝てき
なよ」
 美央の表情が変わる。
「ね、ねるのイヤっ。ゆめがこわいっ!」
「なに言ってるんだ、そんなんで授業受けられるわけな
いだろっ!」
 美央の手をぐぃっと引いて、立たせようとするが、美
央はイヤイヤと首を振る。
「しょうがないなぁ………」
 巽はためらわずに、美央の体を抱き上げた。
 いわゆる『お姫様だっこ』である。
「! ! ! ! !」
 眠気も妄想も一気に吹っ飛んだ美央の頭に、体中の血
が上る。
 そのまま、失神。
「ほら、やっぱ調子悪いんだから。保健室、行くよ」
 クラスの大半が唖然として見送る中、巽は保健室まで
美央を届けた。
 養護の先生が目を丸くしたが『寝不足らしいです』の
一言ですませ、ベッドに無事寝かせると、そのまま教室
へ帰って言った。
 美央は昼休みになるまで、目を覚まさなかった。
 その間どんな夢を見ていたかは、美央と神のみぞ知る。

    ☆   ☆   ☆

</前回07hの追加分>


PはPythonのP ---P IS FOR PYTHON--- 08h



<i>DAD:Come in, my little loves.
  I've got no option but to sell you all
  for scientific experiments.

とーちゃん「ああ、愛しの我が子たちよ。
  私はお前たちみんな、実験材料として
  売らねばならんのだ」</i>

by "<b>MONTY PYTHON'S THE MEANING OF LIFE</b>"





0000-1000.フィルター・オブ・ラヴ



   ■■■望美&翔子in『デルフォイ』■■■

「アレ絶対変です」
 坂下望美は、勢い込んで、向かいに座る大鳥翔子にま
くしたてる。
「そりゃ、あたしは目の前で朽縄くんが美央をだっこし
て廊下に出て行くのを見てますから、美央が意識するの
は無理ないと思います。でも、そんな派手なことやった
当の本人が、全くなにも意識してないなんて、おかしい
です」
「あの子、応急処置とか人命救助とかになると、一瞬も
躊躇しないで人工呼吸とかするタイプよ。時々山にこも
って、おじさまに鍛えられてるから」
 翔子が苦笑しながら言う。
 そう、ひ弱な外見とは全く裏腹に、朽縄巽は父龍介と
ともに、休みの日などに時々山にこもることがある。
 よって、応急処置一般の知識は、父親から叩き込まれ
ているのだ。
 もちろん、このIT親子がコンピュータ無しで生活で
きる筈もないのだが、その点は人力及び火力 (薪?) に
よりダイナモを回して自家発電し、まかなっている(無
論、バッテリー式)。
「そうかもしれませんが、それだけではありませんね。
もし、朽縄くんが自然児なら、もっと野生の本能ばりば
りに、雌を求めてもいいと思います」
「それって、モノスゴイ偏見だと思うけど………」
 翔子の額に、冷や汗が流れる。
 しかし、望美の熱弁は止まらない。
「いいえ、朽縄くんが女性不感症なのは、お父様のせい
ではありません。大鳥先輩、多分あなたのせいですよ」
「あたし? な、なんで?」
 望美の言葉に、翔子はどきりとする。
 そんなこと、考えたこともなかった筈なのに、なぜに
こうも動揺するのか。
「推測に過ぎませんが、多分、朽縄くんの『女性』は、
『大鳥翔子』で全て完結してるのでは?」
「ちょ、ちょっと、それこそおかしいでしょ? 坂下ち
ゃんの理屈だと、お姉さんがいたり、幼なじみの女の子
がいたりする男の子は、みんな巽みたいにヘンになるわ
け?」
 望美は首を横に振る。
「いいえ。普通はいくら身近な存在でも、その男の子に
とって充ち足りない部分があると思うんです。でも、憧
れるにしろ反発するにしろ、その男の子にとって全て必
要なものが揃った女性がいたなら、それは全く別問題で
す。マザコンとかシスコンとか、そういうモノに近いか
もしれません」
「る、類型論は、今の心理学では流行らないのよ。人間
の心は、そんなタイプ分けできるほど、単純じゃないわ」
「そうですね。あたしの考えは、さっき言いましたけど、
推測に過ぎません。じゃ、理屈抜きで簡単に言います。
気付いていないだけで、朽縄くん、先輩のこと、好きな
んじゃないですか?」
「なっ………! ! !」
 翔子の顔が、不覚にも真っ赤になる。
「そして先輩、あなたはそれに気付いてる。だから、朽
縄くんの周囲に女の子が増えても、どうってことないっ
て顔、してられるんですよね」
「そ、それは………」
「それは、先輩が朽縄くんのこと、弟ぐらいにしか思っ
てないから、ですか? それとも、いつもの『イヌ』と
かいう冗談、繰り返すつもりですか?」
「……………」
 黙り込む翔子を、望美は冷たく嗤った。
「いいんですよ、どんな言い訳してても。人間、自分が
一番大事ですもの。自分から好きなんて言わなくても、
好いてくれる人がいるなら、それに越したことは無い。
自分の気持ちを言って、自分の心を曝け出して、自分が
弱い立場になんか、わざわざなる必要は無い。その気持
ち、十分理解できますよ」
「坂下ちゃん………」
「でもね、それって『今のあたし』には不都合なんです。
ですから、『あたしの都合』で、朽縄くんにはそのこと、
気付いてもらいます」
 そして、今までの態度がウソのように、清々しく微笑
む。
「だってあたし、朽縄くんのこと、好きですから」



   ■■■修也&章介in『アルゴール』■■■

 執行部副委員長天美修也と新聞部編集長来生章介は、
珈琲専門店『アルゴール』に居た。
 アルゴールは、ペルセウス座のβ星で、アラビア語で
『悪魔』を意味する。
 なんとも不吉な名前だが、店内はいたって落ち着いた
雰囲気で、有線のジャズチャンネルの音楽が、音量をや
や押さえて流れている。
「華やかな女の子に囲まれてる朽縄くんとちがって、こ
っちは地味だなぁ」
 修也が、にこやかに笑いながらカフェ・ラテをすする。
「抜かせ、女の子を侍らせたければ、いくらでも寄って
くるだろうに」
 章介は、深炒りのアメリカンのカップを、指先でぴん
っ、と弾いて笑う。
「いやいや、俺はどうもそういうのとは縁遠いらしい。
警戒もされないが、相手にもされない」
「わざとだろ、その態度」
「さぁ? でも、俺は気に入ってるよ」
 中高と同じ学校出身で、中学2年では修也とクラスメ
イトにもなったことがある章介は、この態度が自然のモ
ノではないことを知っている。
 一見、天然ボケにニアピンな和み系だが、それによっ
て本人が得することはあれ、絶対に不利にはならない。
 つまり、全て計算づくである可能性が非常に高い。
 もっとも、本人が見かけの通り殆ど無欲なので、普段
は実害は全く無いので、章介もそれに言及する気はなか
った。
 しかし、利害対立が生まれれば別だ。
「話を戻そう。執行部からも生徒議会からも報道局から
も独立した、情報管理部門を新たに立ち上げようって話
なんだが、それについては異存は無いんだな」
「そうだね。世の中変わってきてるし、必要性はわかる
よ」
「で、その初代部長を『彼』に任せたいんだよ」
「朽縄くんかい?」
「そうだ。無論、議会の承認を取るし、なんなら公選し
てもいい。でも俺は、候補として彼を強く推したい」
「他に候補は? 別に今の自治会に求めなくとも、そう
いったスキル持ってる生徒はいるかもしれないじゃない
か」
 章介は深くため息をつく。
「いるだろうさ。でも、滅多に尻尾を出さないし、自治
会活動なんかに興味を向けてくれないんだよ。少し本を
読んだんだけど、彼らの世界 (コミュニティー) はどっ
ちかといえば俺たちみたいな組織じゃなくって、共産主
義者 (コミュニスト) の社会に近いらしい。だから、彼
らを引っ張り出すためにも、そういった文化の人間を頭
に据えておく方がいいってことだよ」
 修也は、にこやかに笑いながら、コップを置いて、目
を伏せた。
「でもね来生、朽縄くんは、大鳥さんへの義理で参加し
てるだけだからね。彼が独立して、活動をやってくれる
とは思えない」
「だからお前に頼んでるんだよ。大鳥会長を動かして、
なんとか朽縄くんをその気にさせてくれないか」
「かいちょう? ………ロプロス?」
「なんでだ?」
「いや、大きな鳥で、怪鳥といえばロプロス………」
「三つのしもべから離れろっ!」

        さいこきねしすてれぱしー。

「そうか、朽縄(くちなわ)は蛇、巽も辰・巳で龍と蛇
だもんなぁ。大鳥(金翅鳥=迦楼羅)は龍を食らうから、
朽縄くんは大鳥さんに逆らえないわけだ」
「ヴェーダのナーガとガルーダも関係無いっ!」
「よく知ってるな」
 関係無いと言っているわりには、突っ込みがあまりに
も的確な章介であった。
「いいかげんまじめに………」
「大鳥さんは、朽縄くんを手放さないよ」
「だからっ!………って、え?」
「無理だ、って言ってるんだよ。大鳥さんに、朽縄くん
を独立させる気は無い。もしあるとすれば、会長の後継
には考えてるかもしれないけど、どっちにせよ独立なん
かさせないだろうね」
「なんでだよ。俺の案、どこか間違ってるか?」
 修也は肩をすくめた。
「人間、理詰めで生きてるわけじゃないよ」
「草津の湯でも〜、ってヤツか」
「わかってるじゃないか」
「やっぱ、そうなるか」
「そうそう、俺に頼んでも無駄ってこと。ま、お前の
『奥の手』の方については、予測を超えてるけどね」
「あ、そっちもバレてた?」
「安心しろ、大鳥さんには言ってないよ。それにそっち
は、お前の計画のほうが『ついで』だからね。馬に蹴ら
れる気は無いよ」
「なんとかうまくいかないかなぁ」
「他の候補、探すこと、勧めるね」
「探しちゃいるけど、朽縄くんほど魅力的な人材は居な
いなぁ。学校のデータバンクにクラッキングかけたりす
る、やんちゃ坊主は結構居るけどね」
「他の人材探しなら、俺も手伝おう」
「じゃ、頼む。彼は惜しいけど、口説くのに失敗して、
計画がパァになっても哀しいからな」
「その口調だと、議会は口説いたのか?」
「まぁ、賛成取る程度には根回ししといたよ。ただし、
有力な指導者がいるって前提だからな」
「それは大変だ」
「大変なんだよ」
「うまくいくといいな」
「祈ってくれ」
 修也は答えずに、穏やかに微笑んだ。



   ■■■巽&八重in『よもやまばなし』■■■

 ところ変わって、ここは学校の近くの甘味処『よもや
まばなし』。
「これで、大体いいかな」
「ありがと、巽くん」
 元会計の羽島八重は、にっこり笑って、巽が色々と書
き込んだ紙を受け取った。
「へぇ、ここのバッテンって、『終了』なんだ」
 紙には、ウィンドウズのスクリーンショット画像がプ
リントアウトされていて、そこに赤のボールペンで、巽
がこまごまと『名称と機能』を書き込んでいた。
「ええ。ウィンドウの使い方が一通りわかれば、なんと
かなると思います」
「そうなの? 私、機械音痴だから、どうしてもなんだ
か触るの怖くて」
 今更ながらだが、この先輩がよく3年まで情報の授業
の単位を落とさずに済ませたと、巽は感心した。
 実は、教科情報はコンピュータの扱い方以外の部分の
方が多いので、コンピュータを全く扱えなくともペーパー
テストだけでかなりの部分はできたりする。
「本来は、コンピュータの操作は、もうちょっと直感的
で簡単になってしかるべきなんでしょうけどね。今のと
ころ、簡単になるどころか、普通に動かしてても止まっ
たりするし。普通ソレって欠陥商品って言いますよね」
 巽の言葉に、八重は苦笑する。
「ホント、ありがとうね。これでちょっとは、使えそう
な気がする。ごめんね、どんくさい人間だと思うでしょ
?」
「全然」
 巽はきっぱりと、首を横に振る。
「だって、未だにみんなみたいに、パソコン、使えない
のよ?」
「それはパソコンの性能が不十分なんですよ。『誰にで
も使える』なんて宣伝するなら、ちゃんと誰にでも使え
るモノを作ってしかるべきです」
「私にも?」
 巽は力強く頷く。
「先輩にも、です。そもそも、マウスを使ったりウィン
ドウを使ったりする方法は、『子供でも直感的に使える
ように』って、作られたモノなんです。そしてそれは最
初、本当に直感で使えた。今のコンピュータは、その頃
のものから寧ろ退化してるんですよ」
「私がどんくさいんじゃないの?」
 巽は笑った。
「あれだけの速さで算盤弾ける人が、どんくさいわけ、
ないじゃないですか」
「えへへ」
「自信を持ってください。『今時パソコンが〜』なんて
言ってる連中ほど、パソコンってどんなモノなのか判っ
てないんですよ。もし判ってれば、今のパソコンが万人
に使えるツールでないことなんか、判らないわけ無いん
ですから。でも、しばらくはその不出来なツールと付き
合うことになるわけですから、数年だけ辛抱してくださ
い。じきにもっと簡単な、本当の万人向けツール、出来
ますよ」
「本当?」
「ええ。そうなるためにも、みんながパソコンに不満を
持ってることを言いつづけなければならないんです。機
械は人間のためにあるんです。人間が機械に使われるた
めに、あるんじゃないんですよ」
「うん、わかった。ありがとね、巽くん」
 八重のほんわりとした柔らかい笑顔に、巽は珍しく顔
を赤くした。
「いえ、僕こそパソコンが無ければただの無能ですし」
「あら、人に出来ないことできる人は無能って言わない
わ。一芸に秀でている人はエキスパートって言うの」
「そんな、僕は………」
 謙遜する巽に、こんどは八重が身を乗り出して言う。
「たとえ将来、パソコンがもっと簡単なモノになったと
しても、巽くんみたいな人は必要でしょ? コンピュー
タが無くなるわけじゃないもの。だから、自分を卑下し
ないで」
「………はい」
「じゃ、教えてもらったお礼で、今日は私がおごっちゃ
う。なんでも好きなの選んでね」
 にっこり微笑む八重に、不思議なくらい動揺する巽だ
った。


        ☆      ☆      ☆


「じゃ、今日はフィルタの話、するよ」
「ん? なんか機嫌いいみたいじゃない。なんかいいこ
とあったの?」
 巽の様子が違うのに、翔子はすぐに気付いた。
「そう? べ、べつに何もなかったけど」
 さらに珍しく歯切れの悪い巽に、翔子は何かを感じて
食らいつく。
「今日帰り、どっか寄ってった? あたしは坂下ちゃん
とお茶飲んでたけど、あんたが帰ったの、あたしより後
だったじゃない」
「うん。羽島先輩がパソコン教えて欲しいって言うから、
ちょっと」
「羽島先輩?」
 全く予想しなかった名前がでて、翔子は少しびっくり
した。
 去年から今年の前期にかけて一緒に仕事した八重のこ
とは、勿論よく知っている。
 アクティブできびきびしている翔子と対照的に、やや
もするとおっとりとした印象の八重だが、外見とは裏腹
に仕事が速い。
 のみならず、観察眼がするどく、見えない気配りが行
き届き、修羅場になりがちな執行部を終始穏やかな雰囲
気で保ちつづけた功労者でもある。
 前執行部委員長笹原信吾(ささはらしんご)は、カリ
スマはあったがやや協調性に欠け、しばしば議会や報道
局などとぶつかることがあった。
 それを調整したのが、当時も今も副委員長である修也
と八重だった。
 有能であることにつき物な冷たさが全く無く、むしろ
温かく優しい八重は、実は翔子のひそかな憧れでもあっ
た。
「で、ちゃんと先輩にわかるように、教えてあげたの?」
「うん。翔子にコレ教えて出してから、教えることって
どんなことか日頃から考えるようになったからね。先輩
もちゃんとわかってくれたみたいだよ」
「ふぅん………」
 確かに、翔子が無理矢理やらせたものであるにも関わ
らず、巽の態度には変化があった。
 まだ時々は暴走するものの、以前よりはゆっくり考え
てモノを言うようになった。
 翔子のひそかな目的として、巽をちゃんと人と話せる
人間にする、というのがあったのだが、その目標は着々
と達成されつつある。
 なのに、今ひとつ気分は晴れなかった。
「羽島先輩優しいから、ちゃんと辛抱して聞いてくれた
のね」
 言ってしまってから、自分の言葉のトゲに気付いた。
 巽は全然気付かなかった。
「そうだね。あんなに優しく接してくれてるのに、なぜ
だろ、なんか妙に緊張しちゃったような気がするんだけ
ど」
「緊張? あんたが?」
 翔子は、巽の思わぬ言葉に驚愕した。
「うん。僕はそんなに人前であがる方じゃないはずなん
だけど、なんか先輩の前だとヘンな感じがしてね」
「そ、そうなの」
「おかしいよね?」
「そうね」
「ま、いいや。そんな話してても始まらないから、始め
よう」「う………うん」
 翔子の胸に、ズキっとなにか痛いものが残ったが、そ
れには自分で気付かないフリをした。
「じゃ、フィルタの話だね。フィルタって言うのは、デー
タを加工するソフトのことだよ。データは、そのまま利
用することは勿論あるけど、必要な部分を抽出したり、
データを利用して計算したりすることも多いんだ。フィ
ルタはそういった作業を行うためのプログラムなんだ」
「なんか地味なプログラムね」
 巽は苦笑した。
「そうかもしれないけど、それはフィルタプログラムが
普通見えないところで働いてるからだよ。実際にはデー
タを加工することが、コンピュータの作業の大半を占め
てると言っても過言じゃない。プログラミングの練習で
は、このフィルタプログラムを書くことから始めるのが
普通なんだ。入力−処理−出力の流れが理解しやすいか
らね」
「じゃ、なぜこれから始めなかったの?」
「地味だから」
「………なによそれ」
 膨れる翔子に、巽は笑いながら言った。
「言葉どおりだよ。確かに実用的なプログラムを書くな
らフィルタが一番だけどさ、毎日データと取っ組んでる
現場のビジネスマンならともかく、僕ら学生には、あん
まり身近なツールとはいえないからね」
「でも、たしかあんた、生徒会室来て初めて書いたプロ
グラムとか、あと、最近新聞部で書いたのとか、アレ、
フィルタじゃないの?」
 巽は目を見開く。
「その通り。すごいや、もうそんなトコまで判るんだ」
「勉強の成果よ。嬉しい?」
 巽は大きく頷く。
「だってさ、自分がやってること、どれだけ大変か判っ
てもらえるって嬉しいよ。便利になったって喜んでもら
えるのは勿論嬉しいけど、苦労を理解してもらえるのは
また別格だよ」
 子供のように喜ぶ巽に、翔子は思わず失笑する。
「そうね、確かに自分で書いてみるまで、こんな面倒な
ことしてるって思わなかったもの。ホント、あんたよく
こんなの、飽きもせずに書いてるわね」
「まぁ、ある程度慣れたら、それはそれで自由自在にデー
タが扱える楽しみってのは、あるんだけどね」
「そこまであたし、我慢できるかしら」
「うん。だからそろそろ実用的な話題、持ってきたんだ
よ。前みたいなゲームじゃなくって、身近に実用で使え
るプログラムの書き方を覚えて、便利なところ、実感し
てもらおうと思って」
「成る程ね」
「じゃ、まず本日のお題から。1行2カラムの CSV 形式
のデータから、条件に合う行だけを抽出して、それを画
面表示するんだ」
「な、なんだかいきなり本格的ね」
「そうだね、応用範囲は広いよ。例えば、こんなデータ
(data.csv) があったとする」

Graham,500
John,700
Michael,900
Eric,800
Terry,600

「ここから、右の数値が 700 以上のデータだけとりだし
て、画面表示してみよう」
「頭ウニ」
「ほら、前回やった疑似コード」
「あ、そっか」

        ・ファイルを読み込む
        ・右の数値が700以上なら、表示

「なんだ、簡単じゃない」
「そうでもないと思うけどなぁ。だって読み込まれるの
は文字だから、数字との比較、結構面倒だと思うよ」
「う、そうね」
「それに一行づつ読み込むとしても、例えば一行目は

        "Graham,500"

だよ。右の数値って言われたって、Python はわかんない
と思うけど」
「う〜、なんで人間が見て判るのに、コンピュータがわ
かんないのよっ!」
「コンピュータが見てるのは、実際の画像じゃなくて電
気信号だからね。文字で表示された数値を、実際の数値
にするには、文字列を整数に変換する int と、文字列を
評価する eval があるけど、int だと整数しか扱えない
から、今回は eval を使おう」
「それで?」
「それで、って、カンマで区切られた文字列を二つに分
ける方法は、もうやったよ」
「えっと(例によってノートをぱらぱら)あ、あった、
split だ」
「はい、じゃ、それを擬似コードに加えて」

        ・ファイルを読み込む
        ・カンマでフィールドに分割する(split)
        ・2番目のフィールドを数値化(evalで評価)
        ・2番目のフィールドの値が700以上なら、表示

「ファイルの読み込みって、file 関数………じゃない、
クラス使えばいいの?」
「そういうこと」
「今回、くり返しはforを使うのよね」
「そうだね。file オブジェクトは for-in 文で1行ずつ
取り出して評価できるからね」
「あと、『〜なら』はifだから………」
「書けそう?」
「ん、やってみる」
「ファイル名は'awk1.py'にしといて」
「なに? awkって」
「そういう整形・フィルタ専用の言語があるんだよ。実
は、こういうフィルタはそれ使えば一発なんだけど、今
回は Python の勉強だから」

f = file('data.csv')
for x in f:
        s = x.split(',')
        n = eval(s[1])
        if n >= 700:
                print x

「どう?」
「一応クセとして、ファイルはクローズしておいて」
「ファイルのクローズって?」
「最後にf.close()を入れるだけでいいよ」

f = file('data.csv')
for x in f:
        s = x.split(',')
        n = eval(s[1])
        if n >= 700:
                print x
f.close()

「これでいい?」
「そうだね、今回はプロンプトで動かすから、それでい
いかも」
「あ、ダブルクリック起動なら raw_input ね。わすれて
た」
「そいういうこと。でも今回はいいよ。じゃ、実行して
みて」

C:\work>python awk1.py
John,700

Michael,900

Eric,800


C:\work>

「なんか、無駄に改行しちゃうね」
「そうだね。もともと文字列の最後に改行コードが入っ
てて、print でまた改行するからね。x の後ろにカンマ
いれてみて。それで、改行一つは無くなる筈だよ」
「なんで?」
「カンマで終わると、改行せずに続けて表示するんだ。
今回は改行が一個入ってるから、その重複を避けるんだ
よ」
「ふぅん」


        print x,

「こう?」
「実行してみて」

C:\work>python awk1.py
John,700
Michael,900
Eric,800

C:\work>

「あ、行間が詰まった」
「ま、こんなもんかな」
「う〜ん、でも、できれば数字揃えたいよね」
「そこまでする?」
「できれば」
「じゃ、カンマで区切った s を、タブコードの'\t'で繋
いでみて」
「繋ぐって?」
「joinを使うんだよ」

        print '\t'.join(s),

「これでいいの?」
「実行、実行」

C:\work>python awk1.py
John    700
Michael 900
Eric    800

C:\work>

「あ、綺麗に揃った」
「タブは 8 文字分だから、8 文字分以内のフィールドな
らこれで揃うよ。それ以上だとズレるけど」
「8文字以上のをそろえる方法あるの?」
「一応フォーマット文字列ってヤツがあることにはある
けど、かなり面倒だから、説明するだけで1時間くらい
かかると思う」
「う………じゃ、パス」
「さて、次のステップに進もう。今度は、結果を画面じ
ゃなくて、ファイルに打ち出すんだ」
「ファイル?」
「そう、ファイルの書き込みだよ。まず、書き込み用の
'out.txt'ってファイルを書き込みモード'w'で開いて、
write メソッドに引数を渡すんだ」
「えっと………変数の名前は'out'でいい?」
「いいんじゃない?」
「で、writeはoutのメソッドよね」
「そうそう」
「メソッドってのは、split とか join みたいなのよね」
「うん」
「じゃ………これでいいかな?」

f = file('data.csv')
out = file('out.txt','w')
for x in f:
        s = x.split(',')
        n = eval(s[1])
        if n >= 700:
                out.write('\t'.join(s))
f.close()
out.close()

「上出来。実行してみて」

C:\work>python awk2.py

C:\work>

「なんにも表示出ないね………」
「メモ帳で開いて中身を見てもいいけど、どうせならプ
ロンプトの type コマンドを使おう」
 ちなみに、UNIX 系 (Linux や Mac を含む) では cat
コマンドに相当。

C:\work>type out.txt
John    700
Michael 900
Eric    800

C:\work>

「あ、書かれてる書かれてる」
「これで、ファイルへの書き込みも出来たってわけだよ
ね」
「なんか………意外に簡単ね」
「慣れればそんなもんだよ。さて、次行こうか」
「ストップっ! お茶ブレイクっ!」
「はいはい」
 その時、ちょうど良いタイミングで、外からお馴染み
の声が聞こえてきた。
 にんまりと笑って、無言で要求する翔子。
「わかった。今日は僕が奢るよ」
「悪いわね」
 しばらくして、紙袋に2本の焼きたての石焼芋を抱え、
帰ってくる巽。
 翔子は、大きな湯のみに焙じ茶を淹れて待っていた。
「わぁ、コレコレ。冬の楽しみの一つよね、やっぱ」
 二つに割ると現れる黄金色の中身から、湯気が立ち上
る。
「そうだね。あったかいモノが美味しくなる季節だよね」
「ふふふ。あ、そうだ。あんた、羽島先輩と何処行った
の?」
「『よもやまばなし』」
「『よもやまばなし』って、学校の近くの甘味屋さん?」
「そうだよ」
「ふぅん、今だとお汁粉とか善哉 (ぜんざい) とか美味
しいよね」
「善哉って、ここらへんだと関西風のつぶし餡のお汁粉
の意味だけど、関東風だと餡かけの餅みたいなものなん
だって聞いたけど」
「そうなの?」
「さぁ、関東風って食べたことないし」
「一度、食べに行こうか」
「善哉食べるためだけに上京するの?」
「別にそれだけじゃなくたって、食べ物一杯あるじゃな
い」
「………結局食べに行くのが目的なんだね」
「何よ。原宿とか行っても、あんたついてこれないでし
ょ?」
「アキバとか神保町とか………」
「却下」
「ううう」
「さって、食べたし、再開再開」
「それ、僕の科白………」
「いいじゃない、たまにはあたしが言っても」
「いいけど………えらくはりきってるね。なんかあった
の?」
「………あたしが前向きじゃ悪い?」
 蛇に睨まれた蛙、ならぬ、孔雀に睨まれた蛇。
「悪く………無いです」
「なら、さっさと始めて」
「ハイ………」
 生態ピラミッドの順位は、永遠不滅なのだ。
「じゃ、もうちょっと一般的なネタで、CSV を HTML の
テーブルデータに変換するフィルタを作ってみよう」
「そんなの、Excelでやればいいじゃない」
 巽はにやっと笑う。
「な、なによ」
「じゃ、ちょっと Excel が HTML データとしてどんなの
吐き出すか、さっきの data.csv を変換して、見てみて
よ」
「えっと、『Webページとして保存』でいいのよね」
 出来たファイルをメモ帳で開いて、翔子は目を剥く。
「な、何よこれっ!」
 そのデータをそのまま掲載するのは紙面の無駄なので
省略するが、参考までに、たった 56 バイトの data.csv
が、約 80 倍の 4,385 バイトになったことだけ書いてお
こう。
「そういうモンなんだよね。Excel で使う全属性を保存
しようとするから、とんでもない容量になるんだ。どっ
ちかというと Excel は、HTML からテーブルデータを読
み込んで、CSV で保存するときに使うほうが便利だよ」
「知らないって怖いわね」
「ところで、HTMLの書き方の基本って知ってる?」
「正式なのは覚えてないけど、html タグで全部を囲って、
head と body にわけて、head の中に title 書いて、body
の中に本文書く、くらいなら知ってるわ。あとタグは、p
とか h1 とか、それくらいなら」
「テーブルは?」
「う〜んと、アレ、結構ややこしいのよね、確か。ちょ
っと怪しい」
「じゃ、簡単にテーブルの説明だけするね。まずテーブ
ルの領域として、table で外を囲むんだ。それから、横
1行につき、tr タグ (table row…テーブルの行の意味)
で囲んで、各々のデータは td タグ (table data) で囲
むんだ」
「ん、なんとなくわかった」
「じゃ、さっきの'data.csv'を HTML ファイルのテーブ
ルデータに変換するプログラム、考えてみて」
「そうね、まず、html の開始タグから、table の開始タ
グまでは共通だから、これは単純に出力ファイルに書き
込めばいいのよね」
「うん、そうそう、そういう感じ」
「で、tableの終了タグから後も共通でいいのよね」
「そうそう」
「だとすると、くり返し部分って、データの行の tr タ
グと、各データの td タグだけよね」
「………」
「え? 違うの?」
「違わないよ。とりあえず書いてみてよ」
「擬似コードから書くの?」
「翔子が必要無いならいいよ」
「じゃ、いきなり書いてみる」
 翔子は、ノートをくっぴきながら、少しずつコードを
打ち込んでゆく。
「あ、改行を含んだ文字列のトリプルクォート、使って
ね」
「え? あ、そうか………」
「あと、文字列の連結は'+'が使えるよ」
「そ、そうね。結構忘れてるかも………」
「ファイル名はcsv2html.pyにしとこうか?」
「なによ、その'2'っての」
「'to'と'two'の引っ掛け。プログラム名の常套手段の一
つだよ。あと、'for'と'four'とか」
「ふうん………」

in_f  = file('data.csv')
out_f = file('data.html','w')
out_f.write('''<html>
<head>
<title>DATA TABLE</title>
</head>
<body>
<table>''')
for x in in_f:
        s = x.split(',')
        sw = '<tr><td>' + s[0] + '</td><td>' + s[1] + '</td></tr>'
        out_f.write(sw)
out_f.write('''</table>
</body>
</html>''')
in_f.close()
out_f.close()

「これでいいと思うんだけど………」
「あ、結構弱気だね」
「当たり前でしょっ! 結構長いの書いたんだから」
「まぁ、とりあえず動かしてみようよ。よっぽど特殊な
ことしない限り、パソコンが壊れたりしないから」
「そうね」
 実行結果は、翔子の心配を他所に、全く問題無く動い
た。
「完璧じゃん。あたしってば、やっぱ天才?」
「そうだね。ミスタイプも無ければ、落としてる要素も
無いし、しっかり書けてるね」
「へへへ、褒めて褒めて」
「ところで、CSV を HTML に変更するって、結構需要あ
るよね」
「うん、まぁ、考えたらありそうかも………」
「でさ、カラムはいつも2列とは限らないよね?」
「な、何よ?」
「せっかく書いたんだから、'data.csv'以外の CSV ファ
イルにも使えるように改造しようよ」
「でも、カラム数わかんないのに、どうやってやるの?」
「ちょっと考えてみてよ。今のままでも、行は何行でも
いけるでしょ?」
「そうね」
「ということは………?」
「………あ、あ―――――っ! もいっこ、for 書けば
いいの、もしかして?」
「ご名答。あと、ファイルの名前をプログラムに埋め込
まないで実行時に渡す方法は教えるよ。sys モジュール
の argv っていうリストに、パラメータとして渡された
名前が入るんだ」
「どういうこと?」
「ま、ここんとこは教えるから、そのまま書いて」
「うん」

import sys
in_f  = file(sys.argv[1] + '.csv')
out_f = file(sys.argv[1] + '.html', 'w')
out_f.write('''<html>
<head>
<title>DATA TABLE</title>
</head>
<body>
<table>''')
for x in in_f:
        s = x.split(',')
        out_f.write('<tr>')
        for y in s:
                out_f.write('<td>' + y + '</td>')
        out_f.write('</tr>')
out_f.write('''</table>
</body>
</html>''')
in_f.close()
out_f.close()

「で、どうやってファイル指定するの?」
「拡張子無しの名前を、プログラムファイルの名前の後
に書くと、その名前'.csv'をつけて読み込みファイル、
'.html'をつけて書き込みファイル名を指定するんだ」

        C:\work>python csv2html.py data

「………あ、出来てる」
「折角だから、データを三列にして、試してみて」
「………あ、これも出来てる」
「これなら、結構応用効くでしょ」
「うん。ところで、内側の for はわかるんだけど、'sys.
argv'って何? なんとなくは判るんだけど」
「見てわかるとおり、プログラムに渡されたパラメータ
が入ってるリストなんだ。最初のアイテムには、プログ
ラムの名前自身、この場合は'csv2html.py'が入ってて、
その次から、渡されたパラメータが入るんだ」
「色々できるのね」
「フィルタが自在に書けるようになれば、日常的な作業
に使うプログラムは殆ど書けるよ」
「じゃ、そろそろあたしも、プログラマとしてデビュー
しようかナ」
「いいね、使えば使うほど、上手な書き方ができるよう
になるよ」
「そのうち、あんたを追い抜いたりして」
「うん、僕ぐらいだったら、追い抜けても不思議は無い
よ」
「………あんた、ホントに競争心無いのね」
「意味無いもん」
「そう?」
「うん。自分が必要なことをするだけのスキルがあれば、
十分だよ。他人は関係無い。特にプログラミングの目的
は、コンテストに勝つ、とかじゃなくて、実用だからね。
だけど、やりたいことが出来ないようなら、腕を上げな
きゃ。だから、もし競争相手があるとすれば、それは与
えられた仕事、だよね」
「なんか、若いのに、枯れてない?」
 巽は肩をすくめた。
「今まで、全てに於いて翔子に負けつづけてた僕だもん。
悟ったよ、いいかげん」
 翔子の心臓が、ずきりと痛んだ。
「あ、あたしのせいだってのっ!」
 巽は首を横に振った。
「『せい』じゃなくて『お陰』。だから僕は、無駄なこ
とに力使うことなく、できることを選んで力を入れてこ
れたんだよ」
「それ、なんかおかしい。絶対おかしいっ!」
 翔子は立ち上がった。
「翔子?」
 訝しげに見る巽に、翔子は心の奥底から奔流のように
流れ出でる言葉を叩きつける。
「巽に何ができるかなんて、まだわかんないじゃないっ!
 あんた若いんでしょっ! 可能性なんて、もっともっ
と一杯あるはずよっ! あたしに負けつづけてたからだ
なんて言い訳して、最初っから出来ること出来ないこと
決めるなんて、絶対おかしいっ! そん……な………!
 ! ! ! !」
 言葉が凍りついた。
 今何が起きているか、翔子にはわからなかった。
「ありがと、翔子」
 巽は翔子の『耳元』で囁いた。
 密着して始めて、成長した巽の体の大きさに気付いた。
 でも、自分が抱きしめられていることに、まだ実感が
湧いていない。
「でもね、勘違いしないで。僕は戦うのをやめたんじゃ
ない。僕なりのやり方で、僕のプライドを持ってやって
るんだ。だから、翔子が生徒会での仕事を与えてくれた
ことも、プログラミングを教えるようになったことも、
全部感謝してる。今まで見えなかったこと、感じなかっ
たこと、色々見えてきたよ。ありがと」
 すっ、と身を離して、巽はにっこりと笑った。
「今日はおしまい。また明日ね」
 巽が部屋を出て行くと同時に、翔子はへなへなとその
場に座り込んだ。
 そして今更ながら、早鐘のように心臓が激しく打ちは
じめた。


        ☆      ☆      ☆


「うん、そう。巽くんにね、教えてもらっちゃった

        ……………

「そう、ホントに優しいね。うん。あとね、あれだけ詳
しいのに、私のこと全然馬鹿にしないんだよ。むしろ、
褒められちゃった。

        ……………

「だから、私はいいと思う。だから、がんばって?

        ……………

「え? そんなこと言うの? あっそ。じゃ、私がもら
っちゃおうかな。

        ……………

「え〜? 嘘じゃないよぉ。巽くんって四月生まれでし
ょ? じゃ、一年とちょっとしか年違わないし。

        ……………

「カレも、まんざらじゃないと思うの。顔見てると判る
し………。私が本気になったら、相手が翔子ちゃんだっ
て手加減しないわよ。

        ……………

「ふふふ。そう。じゃ、がんばってね。あなたなら、遠
慮してあげる。でも、あきらめたらちゃんと言ってよね。
私がもらっちゃうから。

        ……………

「がんばってね。

 ちんっ、っとクラッシクスタイルのダイアルフォンの
受話器を置く。
「困った妹ね、まったく」
 いたずらっぽく笑いながら、八重はもう一度受話器を
取った。
 そして、ダイアルする。

        じーこ、じこ、じーこ、じーーーーこ

「あ、来生さんのお宅ですか。私、羽島八重と申します。
章介くんお願いできますでしょうか………」


        ☆      ☆      ☆


「朽縄くんを中心に、いろいろ動き出したみたいなんだ。
「……………」
「俺は、どんな結果になっても面白いと思うんだよ。彼
がどんな未来を選ぶか、楽しみだな」
「……………」
「へぇ、そんなこと、あるんだ。今も昔も、人間って大
変だね」
「……………」
「いや、俺は君たちはもっと理性的に生きてたかな、と
思ってたから」
「……………」
「そうだよね。そんな生活、おもしろくない。うんっ、
やっぱりそうだ。いろいろあって、不完全で、悩んで。
だから君も俺も人間なんだよね」
「……………」
「そのうち、彼にもあわせてあげるよ。君もきっと、気
に入ると思う」
 大きなヒトデのような頭をしたソレは、困ったように
笑った。



---P IS NOT PYTHON--- 08h

<翔子のノート>
        eval関数:引数に取った文字列を式として評価
        非改行のprint文(最後にカンマで終わる)
                print express,
        書き込み専用ファイルのオープン
                f = file('filename','w')
        書き込みメソッドwrite
                f.write('string')
        実行時のオプションパラメータの取得
                import sys
                option_1 = sys.argv[1]
                (sys.argv[0]はスクリプト名)



<巽の薀蓄>
・AWK
 前に紹介した AWK は、本来フィルタ言語であり、ファ
イルを読ませて加工するという目的では、非常に威力を
発揮する。今回の最初のケース(第二フィールドが 700
以上の行のプリントアウト)などは、この程度で書けて
しまう(ただし、カンマ区切りではなく、スペースかタ
ブで区切られている場合)

C:\work>awk "$2 >= 700" data.csv

 短いスクリプトであれば、このようにオプションパラ
メータとしてスクリプトを渡すことが出来る。

・HTML(Hyper Text Markup Langage)
 ご存知 Web コンテンツのページ記述言語。現在、XML
をベースにした XHTML があるが、別に XHTML に準拠せ
ずとも、XML 形式で書いておけば DOM などのツールによ
るページ解析が容易なのでお勧め。特にブラウザは『規
定されていないタグは無視する』ので、自分で設定した
解析用のタグでデータを囲んでおけば、DOM(Document
Object Model) 解析の時に使用できてお得である。ちな
みに、Python では XML 解析ツールとして、xml.dom モ
ジュールや xml.sax モジュールなどが標準パッケージに
含まれている。

<後記>
 7回8回と、実際のプログラミングのやり方のお話を
しましたが、次はまた原理的/概念的な話に戻り、オブ
ジェクト指向プログラミング (OOP:Object Oriented
Programing) のお話をしたいと思います。
 私も実際の仕事での作業はほとんどフィルタ作りなの
で、本来は Python より AWK とかを使ってたほうが実用
的なのかもしれませんが、それでも Python を使ってる
ということは、単にプログラムをこてこてと書いている
のが好きだとしか言いようがありませんね(実際結構 AWK
も好きなので、時々使ってます)
 さてあと2回、講義パートも小説パートも同時に終わ
らせるって………できるかな?