メイン

「Python」のアーカイブ

2008年7月 7日

Pythonの配列のスライス

すげーコード見つけた - へたれプログラマな日々

こんな簡単な書き方で文字列から数値だけを抜き出してる。
この処理が秀逸だよなぁ。必ず偶数番目に数値がくるっていうのが目からウロコ

DIGITS = re.compile(r'(¥d+)')
>>> print DIGITS.split('abc123a4bcd56')
['abc', '123', 'a', '4', 'bcd', '56', '']
>>> print DIGITS.split('123a4bcd56e')
['', '123', 'a', '4', 'bcd', '56', 'e']

なるほどねー。

個人的にはPythonの以下の記法がおもしろいなーと思いました。

pieces[1::2]

これで、piecesという配列のインデックス1から最後まで2ステップ(1つ飛ばし)でスライスしちゃうと。

JavaScriptにも似たような書き方ないか探してみたけど、見あたらず。

配列のsplitは同じように書けるのになぁ。

var hoge ='a123bc4d567ef89';
hoge.split(/(\d+)/);

ところで上記pythonのコードはTracのどういう機能で使われてるんだろ。

2007年9月12日

CodeZine で Python 入門

CodeZineでPythonに関する連載が始まりました。

CodeZine:Pythonを始めよう(入門, Python)

日本では、Ruby の人気に押されて若干陰が薄くなっているPython 君ですが、Google の3大オフィシャルプログラミング言語に入っているなど、世界的に見ると人気も実績もそれなりにある言語です。

Pythonの特徴と言えば、まず挙げられるのが、ブロックをインデントで表現する、というところでしょう。

{ とか end とか使わないので、コードがすっきりしますし、慣れると結構見やすいです。

あと、Python 2.5からはDB(SQLite)が標準のAPIとして盛り込まれている点も、是非プッシュしたいところ。

DBアクセスのあるちょっとしたアプリを作りたいとき、かなり力を発揮します。

ただ、Python 2.5が使えるレンタルサーバが少ないので、Python2.5で何かアプリを作って公開したいときは、専用サーバを借りるか自前サーバをたてるかしか道がないので、お気軽お手軽にってわけにはいかないんですよね。

あ、あと、Python の名前の由来が、イギリスが産んだコメディグループ「モンティ・パイソン」に由来しているってのも、僕的にポイント高いです。

2007年6月25日

amazon のベストセラーランキング JSON を作る

それPla! な人には常識な話かもしれませんが、正規表現のお勉強と言うことで、amazon の本のベストセラーページを取得して、正規表現でランキングデータを抜き取って、JSON形式にしてファイルに保存するCGIを作りました。

本当はファイルに出力するようにしたのは、1時間に1回しか後進されない静的なページの情報なので、こちらも静的なデータを作っておいた方が良いかと思ったからです。

で、昨日書いたように言語はPythonです。

↓こんな感じ。

import httplib
import urllib
import string
import re

def book_ranking(n):
data = urllib.urlopen('http://www.amazon.co.jp/gp/bestsellers/books/?pg='+n).read()
list = re.findall('<td align=\"center\" valign=\"top\"><a href=\"(.+?)\".+?img src=\"(.+?)\".+?alt=\"(.+?)\".+?/></a>',data)
return list

JSON = '['
pages = ['1','2','3','4']
for page in pages:
list = book_ranking(page)
i = 0
for tmp in list:
if i != 0:
JSON += ','
JSON += '{ "uri":"' + tmp[0] + '" ,"imgpath":"' + tmp[1] +'" ,"item":"' + tmp[2] + '"}'
i = i + 1
JSON += ']'
f = open('./bookranking.txt','w')
f.write(JSON)
f.close()

ランキングは4ページに渡って100位まであるので、ループで回して取得しています。

↓得られたファイルはこんな感じ

http://www.chrisryu.com/ranking/bookranking.txt

思っていた以上にさくっと作れました。

正規表現って面白いです。

2007年6月24日

python で cgi

mash up award や google ガジェットコンテストなんかの準備のため、ちょっとした cgi を書くことに。

これまでは Perl で書いていたんですが(といっても、Webサービスに接続した結果をそのまま出力するだけの proxy 君的な cgi だけでしたが)、ちょっと Python で書いてみようかと思い立ちました。

ローカルでスクリプトを作成し、ローカルPCのapache 上で動作させるとうまく動きました。

お、やった、簡単簡単なんて浮かれて、サーバへアップロードしたら動作しないんですね。

なんでだろ、と思って調べてみたら、私 mod_python で動くスクリプトを作ってました。あー恥ずかしい。

ローカルPC 上のapache では Trac が動作しているので、それ用に apache + mod_python の環境を作っていたのでした。

僕の借りているサーバは python は cgi モードでしか動作しないってことをすっかり忘れていましたよ。

ってことで、やりなおし。

cgi を配置するディレクトリに、以下のような記述を書いた .htaccess を作成。

AddHandler cgi-script .py

でもって、スクリプトの頭にpython へのコマンドパスを書いて、権限を755 にして、これでOKと思って実行したところ、またしてもエラー。

今度は改行コードが問題でした。

\r\n じゃだめで、\n になっている必要があったんですね。

これを修正して再度アップで、なんとか動作しました。

いやはや、基本が分かってないと色々苦労することが多いですね。

2007年3月10日

「最新Pythonエクスプローラ Django,TurboGears,Twisted,IronPython 完全攻略」を買いました。

最新Pythonエクスプローラ Django,TurboGears,Twisted,IronPython 完全攻略」を買いました。

Django、Turbo Gearsといったフレームワークから、Pythonの言語についての解説、さらにはNintendo DS上でPythonを動作させるという小ネタまで充実してます。

「Python良いよ」みたいなことはちょいちょい聞くのですが、Ruby on Railsに押されてか、なかなか実際の利用例を知ることができなかったので(そもそもPythonに関する書籍が少ない!)、おもしろい記事ばかりでした。

この本を元にしたPythonの話はまた今度書くとして。

この記事中で知ったのですが、Pythonって結構たくさん実装があるんですね。

Pythonの作者がCで作っているCPythonに、JavaのVM上で実装されたJython、.Net上で実装されたIron Pythonなどなど。PythonでPythonを実装したPyPyなんてのもあるらしいです。パイパイって響き、なんとなく惹かれます。響きだけですが。

響きだけ、というと、Pythonには"CherryPy"というフレームワークもあるみたいですよ。

チェリーパイって、欧米か! (まあ、欧米のものなのですが)

Pythonの由来はイギリスのコメディ集団「Monty Python」なんだそうで、Pythonの開発に関わっている人たちには、そういうユーモラスな感性があるのかもしれません。

Python - Wikipedia

最新Pythonエクスプローラ Django,TurboGears,Twisted,IronPython 完全攻略
Software Design 編集部
技術評論社 (2007/03/02)
売り上げランキング: 21305

2007年1月14日

Pythonでの数値比較

変数 a について、5 より大きく 10 より小さいときに 'true' という文字を出力したいとき、それぞれの数値について評価を行います。

例えば Java であれば、こんな感じ。

if( 5 < a && a < 10){
System.out.println("true");
}

それが Python ではこんな風に書けるようです。

a = 10
if 5 < a < 15:
print 'true'

'ture'が出力。

a = 10
if 5 < a < 15:
print 'true'

何も出力されない。


こんな風に書いてもちゃんと評価されます。

a = 10
if 5 < a < 15 < 20:
print 'true'

内部的には左から順番に評価されているのでしょうか。

コードの見た目は分かりやすくなりますが、なんとなく気持ちが悪い部分もあったり。

2007年1月 8日

Pythonを勉強してみる

TracがPythonで書かれていることもあり、Pythonを勉強してみることにしました。

実践Python~文字列操作からWebアプリケーション開発まで」を購入して、とりあえずPythonの実行環境を構築し、本に載っているサンプル構文のいくつかをためしてみました。

Java歴が長い僕の感覚だと、ブロックを「{}」でくくらないというのは若干違和感がありますが、まあ慣れれば書く量が減って嬉しいのかもしれません。

Pythonは歴史が浅い言語で、作られたのは90年代初頭なのだとか。

本の最初の方にPythonの設計思想を表現する「Pythonの悟り」という詩が紹介されていて、なかなか良いなと思ったので紹介します。


Pythonの悟り

みにくいものよりも、きれいなもののほうがよい。
隠れて見えないものよりも、明らかに示されているもののほうがよい。
複雑なものよりも、簡単なもののほうがよい。
でも、混乱しているだけのものならば、複雑なもののほうがまし。

入れ子で書くよりも、フラットで書くほうがよい。
「隙間無くビッシリ」よりも「スカスカで広々」なほうがよい。
とにかく読みやすさを感情にいれないとね。

特例ではあっても、それがルールを破るほど特別であってはだめ。
でも、実用が純潔に勝るときもあるけれど。

エラーは決して無視されちゃだめだ。
こっちが意図して無視するのでない限り。

あいまいな場面を前にしても、当て推量をしたくなる誘惑を拒絶しよう。
明らかにうまくいく方法が1つ(唯1つならばいうことがないけれど)あるはずだ。
その方法は、君がオランダ人でないなら、最初はわからないかも知れないけれど。

決してやらないよりも、「今」やってしまうほうがよい。
実は「今すぐ」やってしまうよりも、決してやらないほうがよかったりすることもあるのだけど。

その実装をうまく説明できないなら、そいつは考え方から間違っている。
その実装を簡単に説明できるなら、その考え方はたぶんいいんだろう。
名前空間はすっごく良い考え方の1つだ―こんなヤツをもっと思いつこうぜ!


ね、なんだかおもしろそうじゃありませんか。

というわけで、Pythonを勉強して、Tracのプラグインの1つでも作ってみることにします。


実践Python~文字列操作からWebアプリケーション開発まで
柏野 雄太 小松 亮介 穂苅 実紀夫
株式会社ディー・アート
売り上げランキング: 46733

アーカイブ