The Yak Shaver
さあ、今日も毛を刈ろう。
skip to main
|
skip to sidebar
ラベル
python
の投稿を表示しています。
すべての投稿を表示
ラベル
python
の投稿を表示しています。
すべての投稿を表示
2013/09/25
Mac に Django をインストール
MacでもWindowsでもLinuxでも pip が使えれば、どれもやりかたは同じです。 ここではvirtualenv環境にDjango入れてみます。 $virtualenv --no-site-packages -p /opt/local/bin/python3.3 django $. django/bin/activate $sudo pip install django Django-1.5.4 が入りました。 $cd ~/test $django-admin.py startproject django_test_0 $cd django_test_0 $python manage.py runserver ブラウザで http://127.0.0.1:8000/ を開いてDjangoが起動しているのを確認。
2013/08/25
CSS の 'rgba(255,255,255,1.0)' と #fff を変換する
Pythonによる、CSS3 の 'rgba()' 表記と従来の #16進数表記の相互変換の関数です。
文字列を指定した文字数ずつに分割する
Python の文字列の `split()` は区切り文字による分割はできますが、「何文字ずつに分割する」ということはできないと思います。 [Split string into strings by length?](http://stackoverflow.com/questions/13673060/split-string-into-strings-by-length) で Pythonic な解決方法を示してくれた方がおられました。 シンプルさに感動したので関数化して置いておきます。
2013/08/19
Raspberry Pi の Debian に mod_wsgi をインストール
以下は、Raspberry Pi のApacheに mod_wsgiをインストールしたときのメモです。 - Debian(Wheezy) - Apache 2.2.22 - Python 3.3.2 最初は mod_python を試そうとしたのですが、[ココ](http://stackoverflow.com/questions/16667356/cherrypy-behing-apache-with-mod-python)によると、 > mod_python は古くてメンテされていないので、 mod_wsgi の方がイーンジャネ。 とのことなので入れてみたしだいです。流されやすくてすいません。 ほぼ[ココ](https://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide)のまんまです。 まずは mod_wsgi を入れます。Python3を使っているので mod-wsgi も Python3用のものを入れます。 $sudo apt-get install libapache2-mod-wsgi-py3 テストとして走らせる .py を入れるディレクトリを作ります。 $cd /var/www $sudo mkdir test テストとして走らせる .py をそこに置きます。 $cd test $sudo vi wsgi0.py ----------- def application(environ, start_response): status = '200 OK' output = 'Hello World!' response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(output)))] start_response(status, response_headers) return [output] ----------- バーチャルホストを設定します。 このRaspberry Pi のローカルIPアドレスは 192.168.1.2 とし、架空のDDNSサービス(ddns.net)で mynetというホストを登録した例です。 $cd /etc/apache2/sites-available $sudo cp default hoge $sudo vi hoge ----------- NameVirtualHost 192.168.1.2:80
ServerAdmin admin@hoge.mynet.ddns.net ServerName hoge.mynet.ddns.net DocumentRoot /var/www
Options FollowSymLinks AllowOverride None WSGIScriptAlias / /var/www/test/wsgi0.py
Order allow,deny Allow from all
ErrorLog ${APACHE_LOG_DIR}/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog ${APACHE_LOG_DIR}/access.log combined
----------- $sudo a2ensite hoge Apache を再起動します。 $sudo /etc/init.d/apache2 restart WWWブラウザで http://192.168.1.2/test にアクセスして 'Hello World!' と出ればOKです。 ルーターのポートを開放してあれば、http://mynet.ddns.net/test でも同様に 'Hello World!' と出るはずです。
2013/08/15
Python の takewhile と dropwhile
map のようにリストを高階関数で回して、途中で終了したいときや途中から始めたいときに便利です。 takewhile:条件が成立しているうちは継続し、成立したら中断 >>> from itertools import takewhile >>> l = [0, 1, 2, 3, None, 5, 6, 7, 8, 9] >>> list(takewhile(lambda x: x != None, l)) [0, 1, 2, 3] dropwhile:条件が成立しているうちは読み飛ばし、不成立になったらそこから継続 >>> from itertools import dropwhile >>> l = [0, 1, 2, 3, None, 5, 6, 7, 8, 9] >>> list(dropwhile(lambda x: x != None, l)) [None, 5, 6, 7, 8, 9] 他にも itertools には使いでがありそうなものが多いです。
filter, map をリストの内包表記で。
Python3 では、filter や map がイテレータオブジェクトを返すらしく、Python2の習慣でリストのように扱おうとすると `TypeError` が発生します。 >>> l = filter(lambda x: x % 2, range(10)) # 奇数だけ抜き出し >>> l
>>> l[0] TypeError: 'filter' object is not subscriptable これを回避するには、下のように list() で包んでやればいいのですが、ちょっと冗長な気がします。 >>> l = list(filter(lambda x: x % 2, range(10))) >>> l [1, 3, 5, 7, 9] >>> l[0] 1 やはりPython的には、リストの内包表記で書きなおす方法が自然なので、filter は下記のように。 l = list(filter(lambda x: x % 2, range(10))) # 奇数だけ抜き出し ↓ l = [x for x in range(10) if x % 2] 同様に map は下記のように。 l = list(map(lambda x: x * 2, range(10))) # 各要素を2倍する ↓ l = [x * 2 for x in range(10)] reduce は… for で回す…くらいなら `from functools import reduce`します… 。
2013/07/22
例外処理 try .. except のサンプル (Python3版)
割り算を繰り返している最中に、ゼロで割り算してしまったら、そこで `ZeroDivisionError` という例外が発生します。 例外処理 `try..except` を使わない `not_used()` 関数は、そこでプログラムが異常終了してしまいますが、 例外処理を使っている `used()` 関数は処理を中断せずに最後まで実行します。
プログラムにとって、途中で異常終了するのは最悪なことです。 とくにマルチユーザのプログラムでは、1人のユーザの操作が原因で全員の作業を中断させてしまうことにもなります。なので、このような致命的な事態はできるだけ避けなければなりません。 上の例のように、原因が分かりきっているバグはすぐに取ってしまえばいいですが、原因が予測できないケースや、原因が多岐にわたるケースもあります。 そのような場合は、エラーを避けるための事前確認処理として `if .. elif .. else` を何個も入れることになり、結果として読みづらいコードになりがちです。 例外処理 `try..except` を使えば比較的シンプルにエラー処理を書くことができ、開発時には想定していなかったケースにも対応しやすいです。
2013/07/17
Pythonで「ImportError: No module named …」が出た時の3つの対処法
このエラーは、インポートしている .pyファイルが見つからないときに出ます。 果てしなく既出っぽいですが、他のモジュールを使うときの3通りの方法をまとめます。 例:main.py が /path/to/dir/sub.py をインポートする場合 #### 1. インポートする側のソースファイルで対処 インポートする側のソース(main.py)の先頭に下記を書き足す。 import sys sys.path.append('/path/to/dir') #### 2. シェルで対処 .bashrc 等に下記を書き足す。 export PYTHONPATH=/path/to/dir:$PYTHONPATH #### 3. 実行する度に対処 ふだん、main.py を実行するとき、 $python main.py としているのを、 $PYTHONPATH=/path/to/dir python main.py として実行する。 カレントディレクトリ配下のディレクトリを指定する場合は、下記のように。 $PYTHONPATH=. python main.py ---- いずれの場合も、インポートされる側のディレクトリに`__init__.py`を置くのを忘れないように注意。 /path/to/dir | +-- __init__.py | +-- sub.py
2013/07/13
Genshi のテンプレートにHTMLリテラル文字列を挿入したい
HTMLタグの含まれた文字列を Genshi に渡すと、`>`や `<` などがエスケープされてしまい、意図した動作になりません。 [公式サイトのFAQ](http://genshi.edgewall.org/wiki/GenshiFaq#HowcanIincludeliteralXMLintemplateoutput) では3通りの解決方法を挙げていますが、その一つのMarkupクラスを使う方法を示します。 単純に、文字列をMarkupクラスでラップして渡してやればOKです。 以下に例を。
2013/07/10
Python 3.3 で CherryPy
Python2.7までは、CherryPy のインストールは不要でした。 公式サイトから一式を[ダウンロード](http://download.cherrypy.org/cherrypy/3.2.2/)して、その中身の cherrypyフォルダをスクリプトと同じ場所にコピーするだけ動いたのです。 しかし、Python3.3では今のところこの方法は使えないようです。 現在、公式サイトにある CherryPy の最新バージョンは 3.2.2 ですが、このバージョンはまだ Python3.3 に対応していません。 Python 3.3 で CherryPy 3.2.2 を使うと、下記のエラーが発生します。 >AttributeError in cherrypy.process.plugins - threading._Timer 未対応箇所については、[このあたり](https://bitbucket.org/cherrypy/cherrypy/issue/1163/attributeerror-in-cherrypyprocessplugins) で議論されており、pip のパッケージ(usr/lib/python3.3/site-packages/cherrypy/)にある CherryPy 3.2.4 は対応済みの模様です。 ですので、ローカル環境で動かすには、 $sudo pip install cherrypy とすれば、Python3.3で cherrypy が動きます。 リモートサイトに上げるときは、この pip で取得した cherrypy フォルダをアップロードすることになります。
2013/06/27
大ざっぱすぎる西暦→和暦変換。
適当ですが、西暦→和暦変換プログラムをPythonででっち上げました。 - 明治、大正、昭和、平成のみ - 年号が変わる年の月の考慮なし
(例:1989年途中まで 昭和64年 ですが、平成1年 と表示) 厳密な用途(誕生日計算など)には使えないです。 とりあえず平成があれば十分なのと、なんしか今は時間ないので。
2013/06/26
MacPorts で Python3.3を入れる
そろそろ重い腰を上げて、 Python 3.xx に移行することしました。 しかし、いっぺんに切り替えるのは怖いので、 virtualenv を使って Python2系 と Python3系 を同時に使えるようにしてみたいと思います。 また、今までメインで使っていた 2.7系は Python.org のインストーラ(.dmg)から入れたものでしたが、この際 MacPorts に統一したいと思います。 まずは、[ココ](http://blog.fkoji.com/2012/10022035.html)を参考に、今まで入っていた Python2.7系を消します。これは、 `/Library/Frameworks/Python.framework/Versions/2.x` に入っています。 次に port で Python を探します。 $sudo port -d $port search python* : python26 @2.6.8 (lang) An interpreted, object-oriented programming language python27 @2.7.5 (lang) An interpreted, object-oriented programming language python31 @3.1.5 (lang) An interpreted, object-oriented programming language python32 @3.2.5 (lang) An interpreted, object-oriented programming language python33 @3.3.2 (lang) An interpreted, object-oriented programming language : たくさんありますが、今回は3.3と2.7を入れてみます。 $sudo port install python33 python27 $which python /opt/local/bin/python $python --version Python 2.7.5 この状態では、2.7系が有効になっているようです。 つぎに virtualenv を入れます。 $sudo pip install virtualenv では早速、3.3環境と2.7環境を作ってみます。 $cd ~/test/python $mkdir env $cd env $virtualenv -p /opt/local/bin/python3.3 33 $virtualenv -p /opt/local/bin/python2.7 27 これで、`~/test/python/env/` の中に 3.3環境と2.7環境ができました。 まずは 3.3環境を使ってみます。その環境のPythonを使うには、そのディレクトリのなかにある bin/activate を source します(って日本語?)。 $. ~/test/python/env/33/bin/activate (33)~$python --version Python 3.3.2 `activate`すると、プロンプトが変わります。 次に、もうひとつターミナルを開いて、2.7環境を使ってみます。 $. ~/test/python/env/27/bin/activate (27)~$python --version Python 2.7.5 このように、異なる環境のPythonを同時に走らせることができるので、バージョンやインストールされているパッケージの違いによる挙動の違いを比較する場合などは手軽に試すことができます。
2013/06/19
メジャーモードごとに eval-region を切り替える
[Python でもスクラッチバッファで対話したい](http://yak-shaver.blogspot.jp/2013/04/python.html) のつづきです。 メジャーモードごとに eval-region を切り替えるようにしてみました。簡単な割に便利です。 これで、スクラッチバッファでもそうでなくても `M-x eval-region` すると、そのメジャーモードにふさわしい eval-region が呼び出され、リージョンの評価結果をプリントするようになります。…といっても、今のところ Python, Ruby, ELispだけですが。 各モード用の `eval-region-xxx` の関数定義は共通化すればシンプルになりそうですが、早すぎる最適化を招きそうなのでこのまま放置です。
2013/06/11
あるXtalをボーレート設定に使ったときの誤差を求める
部品屋でボーレート設定用の Xtal を探すときは[この式](http://yak-shaver.blogspot.jp/2013/06/blog-post_11.html)で事足ります。 しかし、手持ちのジャンク箱から適当なクリスタルやセラロックを引っ張りだしてボーレート設定に使いたいときなどは、できるだけ誤差の小さいものを選びたいものです。 手前味噌ですが、クリスタルの周波数と目的のボーレートをキーボードで入力して、誤差を求めるPythonプログラムを書きました。 $baud.py Xtal frequency [MHz]:1 baud rate [bps]:9600 --> err:0.16[%] 上の例では 1MHz のクリスタルを 9600pbs で使った場合の誤差を求めています。
2013/04/23
Pyhton で JPEG画像を添付してメールを送信
前回の、 [Pyhton で GMail の smtp で UTF-8 なメールを送信](http://yak-shaver.blogspot.jp/2013/04/pyhton-gmail-smtp-utf-8.html) のつづきです。 今回は JPEG画像を添付してメールを送ります。 テキストだけのメールであれば MIMEText()で用意したメッセージだけでいいのですが、添付ファイルをつけるとそれ以外に2種類のメッセージが必要になります。 - 本文テキスト用 MIMEText() - 添付ファイル用 MIMEImage() - コンテナ用 MIMEMultipart() ここで、添付ファイル用のメッセージはファイルごとに必要です。 ですので、添付画像が1つであっても合計で3つのメッセージが必要ということになります。 コンテナ用のメッセージの中に、他の2種類を格納して送信します。`From` や `To` を設定するのは、コンテナ用のメッセージに対して行います。
2013/04/17
Google の Custom Search Engine で画像を検索するサンプル
Python から Google の Custom Search Engine を使って画像を検索するときに、いくつかハマりどころがありましたのでメモを残します。 あらかじめ、ライブラリはインストールしておきます。Python 用のライブラリのインストール等については、[このあたり](https://developers.google.com/api-client-library/python/start/get_started)を参照するといいと思います。 あと、GoogleのID などはあらかじめ取得しておき、Google API コンソールを使える状態にしておきます。 つぎに、APIキーが必要です。[ここ](http://code.google.com/apis/console)の 左ペインの API Access をクリックし、下の方にある `API key:` と書かれている 39文字の文字列がそれです。これをどこかにコピペしておき、あとで API を使うときに `developerKey` パラメータとして指定します。 つぎに、専用の検索エンジンの設定を作ります。[http://www.google.com/cse/all](http://www.google.com/cse/all) に行って検索エンジンを追加し、検索するサイトを `*.jp` とかにしておきます。 作成ボタン > コードを取得ボタン と押していくと、JavaScriptのコードが表示されます。このコードの `var cx = 'XXXX'` というのが 検索エンジンID です。 このIDをどこかにコピペしておき、あとで APIをコールするときに `cx` パラメータとして指定します。 つぎに、左ペインの 検索エンジンの編集 の下にあるプルダウンメニューで先ほど作成した検索エンジンを選択します。画像を検索したい場合は、ここで下図のように、画像検索をオンしておく必要があります。  あとは、下にあるコードをファイルに保存し、先ほどコピペした2つの文字列をコードに埋め込みます。 ####参考リンク - [Custom Search API のリファレンス](https://google-api-client-libraries.appspot.com/documentation/customsearch/v1/python/latest/customsearch_v1.cse.html) - [Googleを使った表記ゆれ検索](http://kinakomochi.6.ql.bz/?Google%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E8%A1%A8%E8%A8%98%E3%82%86%E3%82%8C%E6%A4%9C%E7%B4%A2) - [43.Google画像検索API。クエリを作って欲しい情報をゲット](http://www.garunimo.com/program/linux/linux43.xhtml)
2013/04/15
Pyhton で GMail の smtp で UTF-8 なメールを送信
Python でメールを送信すること自体は簡単です。 しかし、GMail のSMTPサーバーを使ったり、日本語のメールを送信しようとすると、ちょっとコツがいります。 いつも忘れてしまうので、サンプルとして残しておきます。 考えなければならないことは、 - 要ログイン (user, pass) - 要SSL (port 587) - 要STARTTLS - MIMEText は 要エンコード(UTF-8等) あたりでしょうか。
2013/04/10
Python でもスクラッチバッファで対話したい
果てしなく車輪の再発明っぽいのですが、Emacs の Python の対話環境をでっちあげてみました。 リージョンを選択して M-x eval-region-python すると、評価結果をカーソル行の下に挿入します。雰囲気としては Lisp Interaction モード で C-j したときのような感じです。 (defun eval-region-python (beg end) (interactive "r") (insert (with-output-to-string (shell-command-on-region beg end "python" standard-output)) "\n")) ちなみに、結果をスクラッチバッファに出さずに、slime っぽく別のウィンドウに表示する場合は下記のように。 (defun eval-region-python (beg end) (interactive "r") (let ((buf "*Py Output*") (curwin (selected-window))) (shell-command-on-region beg end "python" buf) (pop-to-buffer buf) (select-window curwin))) こういうのをスクラッチバッファのメジャーモードを検知してすべての言語に対応してやれば、最強のスクラッチバッファになるかも…。 ####参考にさせてもらったページ - [スクラッチバッファで小さなプログラムを走らせる](http://ryo1miya.hatenablog.com/entry/20121108/1352390277) - [How to implement 'shell-command-on-region-to-string' emacs/elisp function?](http://stackoverflow.com/questions/3576192/how-to-implement-shell-command-on-region-to-string-emacs-elisp-function)
2013/01/23
Mac で "defaults write ほげ" とかするときの、plistをすべて表示する
Mac で設定値をコマンドラインで書き込むときに $defaults write ほげ とかします。 このときの「ほげ」がわからんので全部表示するのをpythonで作りました。
$python default_all_print.py | less とかして使います。 なんせキーだろうが値だろうが、全部出るので検索するのに便利かも。
前の投稿
ホーム
About
Unknown
詳細プロフィールを表示
Labels
AVR
( 12 )
Blogger
( 10 )
Chrome
( 2 )
cocoa
( 5 )
Eagle
( 5 )
emacs
( 31 )
game
( 1 )
Google
( 4 )
iPhone
( 2 )
Javascript
( 1 )
lisp
( 4 )
LPCXpresso
( 1 )
mac
( 53 )
Markdown
( 4 )
msp430
( 1 )
NXP
( 1 )
Parallels Desktop
( 1 )
PIC
( 3 )
python
( 19 )
Raspberry Pi
( 9 )
ruby
( 1 )
Safari
( 2 )
shell script
( 4 )
Sublime Text
( 1 )
windows
( 7 )
xcode
( 8 )
xyzzy
( 60 )
おぼえがき
( 69 )
まとめ
( 6 )
メール
( 2 )
よもやま
( 19 )
工作
( 23 )
電験
( 4 )
本日の探索結果
( 2 )
Blog Archive
▼
2015
( 3 )
▼
02
( 1 )
C99 サンプルコード
►
01
( 2 )
►
2014
( 17 )
►
12
( 1 )
►
07
( 3 )
►
06
( 3 )
►
04
( 2 )
►
03
( 4 )
►
01
( 4 )
►
2013
( 135 )
►
12
( 5 )
►
10
( 6 )
►
09
( 7 )
►
08
( 10 )
►
07
( 24 )
►
06
( 15 )
►
05
( 15 )
►
04
( 17 )
►
03
( 13 )
►
02
( 17 )
►
01
( 6 )
►
2012
( 11 )
►
10
( 5 )
►
07
( 1 )
►
02
( 2 )
►
01
( 3 )
►
2011
( 86 )
►
12
( 2 )
►
11
( 2 )
►
10
( 1 )
►
07
( 2 )
►
06
( 3 )
►
05
( 20 )
►
04
( 49 )
►
03
( 7 )
►
2009
( 4 )
►
03
( 1 )
►
01
( 3 )
►
2008
( 8 )
►
12
( 8 )
STAT
Ads
Amazon.co.jp ウィジェット
Powered by
Blogger
.