pythonの正規表現でマッチしたグループを参照する
pythonの正規表現でマッチした部分の文字列を取得するにはmatchメソッドの戻り値のgroupメソッドを使います。
正規表現オブジェクトの生成とマッチング
reパッケージのcompile関数に正規表現を食わせると正規表現オブジェクトを生成できます。
この正規表現オブジェクトのmatchメソッドに検査したい文字列を突っ込むと結果が返ってきます。
マッチしない場合はNoneが返ってきます。
import re matcher = re.compile( ".*function (.+) {" ) result = matcher.match( targetString )
マッチ部分の取得
上記の結果のオブジェクトのgroupメソッドを使うと、マッチ部分を取得することが出来ます。
import re matcher = re.compile( "((.+)\t(.+))" ) result = matcher.match( "foo\tbar" ) print result.group(1) #foo print result.group(2) #bar
groupsメソッドを使うとリストで取得することもできます。
まとめ
compileして
matchして
groupで取得
pythonのmakoでファイルからテンプレートを読む
pythonのテンプレートエンジンmakoでテンプレートをファイルから読み込むにはコンストラクタでキーワード引数を使います。
- mako welcome to Mako!
Djangoだとファイルから読むのが面倒だったからmakoに乗り換え。
ファイルからテンプレート読み込み
キーワードfilenameにテンプレートが記述されているファイルのパスを指定して、Templateオブジェクトを生成します。
from mako.template import Template result = Template( filename=path ).render( { "foo" : "bar"} )
pythonでファイルのコピー・移動
pythonでファイル操作(not中身)をするときにはosパッケージかshutilパッケージを使います。
- os 14.1.4 ファイルとディレクトリ
- shutil 404 Not Found
コピー
コピーはshutilパッケージで出来ます。
ex) ディレクトリをコピーする
import shutil shutil.copytree( "dir1" , "dir2" )
shutilパッケージでは主にコピーと再帰的にディレクトリを処理するAPIを提供してくれます。
- copyfile
- copytree
- rmtree
移動
移動はosパッケージに用意されています。
ex) ディレクトリ操作
import os os.mkdir( "dir" ) os.rename( "dir" , "folder" ) os.remove( "folder" )
osパッケージではこれ以外にも細かいAPIまで用意されています
- symlink
- chown
まとめ
コピーはshutil
移動はos
で、なんで別れてるの?
付録
shutil.copy( src , dist )
@param src コピー元のファイルパス。ディレクトリはダメ。
@param dist コピー先のパス
srcからdistへコピー。distの挙動はcpコマンドと同じ。
shutil.copytree( src , dist )
@param src コピー元のディレクトリパス。ファイルはだめ。
@param dist コピー先のパス
だいたいcp -rと思えばOK
shutil.rmtree( target )
@param target 削除するディレクトリパス。ファイルはだめ。
rm -rfと思えばOK。
os.rename( src , dist )
@param src 移動・リネームするファイルパス
@param dist 処理先のパス
mvコマンド
gmWrapperのソースをgithubで公開しました
グリモンuserscriptをChromeに移植するときに使う、GM APIのラッパっぽいものとプロジェクトテンプレートを書いた - 心魅 〜 cocoromi 〜
上記のエントリーでアップしたChrome用のGreaseMonkeyラッパーのソースをgithubにupしました。
http://github.com/umezo/umezone/tree/master/chrome/gmWrapper/
経緯
そもそも今までzipで公開していたのには以下の理由がありました。
- Chrome拡張の開発をWindowsでしか出来ないと思っていた
- 誰も使わないと思っていた
ところが、この2点が両方ともつい先日、やぶられたのです。
そこで、自分の拡張開発環境をlinuxに移すと同時に公開することにしました。
既知のバグ
XHRでXMLドキュメントを取得すると、落ちます
なんか他にあったら教えてください。
opensocial-jqueryでリクエストをsigned requestにする方法
URLの後ろにsignedって付ける。
簡単。涙がでる。
参考文献:AjaxOAuth -
opensocial-jquery -
jQuery.ajax のリクエストに署名できます。jQuery.get や jQuery.post などのショートカットでもリクエストに署名できます。 -
OpenSocial jQuery is jQuery based concise JavaScript Library for rapid OpenSocial Apps development. - Google Project Hosting
送られてきたsignedリクエストが妥当であれば、少なくともいくつかのパラメータが改ざんされてないことが保証される。
と、俺は信じている。
これにより他人のユーザIDを指定して、データを盗んだり出来なくなる。
実際に使ったところ
※ここに出てくるJavascriptはかなり微妙です。まねしないように。(勝手にcmdとかいう属性作っちゃったりしてるところが。
クリックしたらデータ取ってきて、表示
コードを見て判るとおり、JSは至って普通のjQuery.getなんですが、
URLの末尾に空白を入れてsignedと付けると、ライブラリ側で空気を読んでくれます。
html
<a cmd="load_history" href="http://hogehoge/mogemoge/ signed" target="#history">load histry</a> <div id="history"></div>
43 load_history : function ( event ){ 44 event.preventDefault(); 45 var t = $( event.target ); 46 $.get( t.attr( "href" ) , function ( data ){ 47 data = eval( "(" + data + ")" ) ; 48 49 $( $(t).attr("target") + " tr.account" ).render( { account : data } ); 50 } , "json" ); 51 }
まとめ
opensocial-jqueryでsignedリクエストをしたいときはsignedをURLに付け足す。
男はだまって + " signed"
Djangoでリクエストを受け付けるようになるまでの手順概要
Django便利なんだけど、最初にやることが多すぎて覚えられないから、手順をメモる。
本家チュートリアルはこちらはじめての Django アプリ作成、その 1 — Django v1.0 documentation
- django-admin.py startprojectでプロジェクトを開始する
- settings.pyにDBの設定を書く
- manage.py startappでアプリケーションを開始する
- (optional)アプリディレクトリの下のmodels.pyにモデルを定義する
- (optional)モデルを定義したらmanage.py syncdb
- urls.pyにアクセス用のURLとその時に呼ばれる関数のマップを定義する
- views.pyに上で定義した関数を実装する
- (optional)manage.py runserver $(hostname):PORT で開発用サーバを起動する
pythonでソースファイルの絶対パスを取得する
注:python 2.6で動作確認しました。
pythonの事は良くわからない。だからどんなことでもメモしていく。
アプリケーションを作っていると、とあるファイルからの相対パスで指定したくなることと言うのが良くある。
だから、良くアプリの設定にアプリケーションルートを設定したりするところがある。
でも、俺はそういうめんどくさいことはしたくない!!!!
良いじゃないか、設定ファイルがあるところそこがルートなんだよ!がたがた文句言うんじゃねぇ!
っというわけで、自動的にあるファイルの絶対パスを取得したりしたいんですよ?
pathモジュール
pythonにはos.pathという糞便利なモジュールがあってこいつと__file__という特殊な変数を使うとそのファイルが置いてあるディレクトリの絶対パスが取得できます。
きっと設定ファイルはconfとかいうディレクトリに入ってるからルートはその親だよね。
from os import path APP_ROOT = path.dirname( path.abspath( __file__ ) ) + "../"
実際に使ったところ
djangoのMEDIA_ROOTって、サンプルとかチュートリアルとか読むと、絶対パスで書いてあるんだけど、それがすごく気持ち悪い。
良いジャンプロジェクトのなかのディレクトリで良いジャン?!
そんなわけでこんなコードになる。
36 # Absolute path to the directory that holds media. 37 # Example: "/home/media/media.lawrence.com/" 38 from os import path 39 MEDIA_ROOT = path.dirname( path.abspath( __file__ ) ) + "media"
pathモジュールの他のメソッド
関数なの?メソッドなの?
調べたついでにpathモジュールの便利そうなメソッドをメモする
他のが知りたかったら6.2 os.path --
共通のパス名操作をみる。
abspath( SOME_PATH )
@return 文字列
引数に突っ込んだパスを絶対パスに変換してくれる。
dirname( SOME_PATH )
@return 文字列
引数に突っ込んだパスをディレクトリまでのパスに変換してくれる。
abspathとのコンボでよく使いそう。
絶対覚えたい。
exists( SOME_PATH )
@return 真偽値
SOME_PATHで表されるパスが存在するかどうか確かめる。
basename( SOME_PATH )
@return 文字列
SOME_PATHからファイル名の部分を抜き出してくる。
なにこれすごい。
#Pythonのライブラリリファレンスってなんで戻り値の型が書いてないの?
まとめ
ファイルのパスに関する操作をしたかったらos.path。
男は黙って、from os import path。たぶん。
なんかすごいまずい間違があったら誰か突っ込んで。