「Python」タグアーカイブ

Google App Engine for PythonのXML解析方法

Google App Engine for PythonでXMLの解析。
何箇所かでつまずいて泣きそうになった。解決まで6時間くらいかかった。

最初に見つけたのはElementTreeというものを使う方法。
最初は凄く簡単にXMLの解析ができるので感動していたけど、エラーが出て解析できないものに遭遇。
なので次にBeautifulSoupというものを使った。BeautifulSoupを使うと上手く行ったけど、BeautifulSoupでも解析できない場合があったので再びElementTreeへ戻りいろいろ調べてやっと解決。

つまづいたのは、findall(‘//名前’)のようにして、全て検索する場合。なぜかうまくいかない場合があった。
なので、ツリーを順番に上からたどってあげると上手く行った。
以下一部

from xml.etree.ElementTree import XML, ElementTree, Element
import urllib
import urllib2

まず上の3つを使うので読み込んでおく。全部最初から揃ってるらしいので上の3行を書くだけでOKらしい

url = “http://~”
xml = ElementTree(file=urllib2.urlopen(url))
root =xml.getroot()

次にURLを読み込み、ElementTreeのオブジェクト?にして、getroot()でルートに移動。

for find in root.getiterator():
if’entry’ in find.tag:
for id_find in find.getiterator():
if’id’ in id_find.tag:
self.response.out.write(id_find.text)

この部分で必要な情報をXMLから取り出す。(コピペしたらタブが消えてる)

getiterator()は全ての要素をゲットするのでforで回転させる。
次に、ifを使い、例えばentryという要素を見つけた場合は、entryより下の要素をgetiterator()ですべて取り出す。
要素名はfind.tagのようにして取り出せるので、これで判別する。

次にentryの下にある、例えばidという属性の中身を取り出したい場合は、if’id’ in id_find.tag:として
self.response.out.write(id_find.text.encode(‘UTF-8’))で書きだす。
.encode(‘UTF-8’)を付けないと日本語が入る場合エラーが出るみたい。基本的に全部.encode(‘UTF-8’)を付けるようにしてる。

こうやってXMLを使ってみたんだけど、凄く面倒なことをしてる気もする、findall(‘//名前’)やgetiterator(”名前”)で上手くいけばかなり楽なのになぜかエラーが出るので
取り敢えずこれで済ませる。

1

Google App Engine for Pythonの文字化けエラーまとめ

Pythonの文字化けで検索すると同じようにはまってる人がたくさんいた。

よくわかってないけど、取り敢えず先に進めるようになったので中途半端なメモ

Pythonの中ではunicode型というものが標準で使われていて、これが問題の中心っぽい。
なので外から入れるときにunicode型に変換して、中から外に出すときにunicode型からutf-8に変換する、ということを頭の中に入れておくと見通しがよくなるみたい。

文字関係で出てくる

decode
encode

の意味は

decode=元の型に戻す
encode=元の型から、ある型に変換する

というのを初めて知った・・・。なので

encode(‘UTF-8’)、utf-8へunicode型から変換
decode(‘UTF-8’)、utf-8からunicode型へ変換

という意味らしい。

もう一つ

unicode(str, ‘utf_8’)

というのがあって、これも使い方はdecodeと同じらしい。

1

Google App Engineを一通りいじり終わる

Google App Engineって何ができるのか?
趣味で素人が1週間ぐらい触ってみた時点でのメモ

Google App Engineは、サイトを作る環境を丸ごと提供してくれるもの。
専用のツールをダウンロードすれば、あとはエディタだけでも全部作れる(たぶん)。
サイトを作る側は、サイトを作ることに集中できる、あとは全部丸投げ。
使えるプログラムはJAVAかpython
サイトを1アカウントで10個作れる。グーグルのサブドメインを使うなら基本全部無料。独自ドメインももちろん使える。
一定のアクセスまでは無料で、もし無料枠を超えたら、お金を払うとすぐ対応できる。
間違えてヒットしてアクセスが急増しても、グーグル側で資源を振り分けて、対応してくれる。(こういうのがクラウド?)
用意してあるサンプルを理解すれば、フレームワーク、テンプレート、データベースが理解できる。PHPで簡単なことができる人なら1週間ぐらいでわかる、と思う。
データベースは独自の物だけど簡単。データベースをいじれる画面も用意されてる。
データベースの中身のダウンロード、アップロードも簡単。

使えば使うほど凄い、と思えてきた。

1

初心者がpythonとかフレームワークとかテンプレートエンジンとかをいじってみた感想

1週間ほどいじってみた感想・・・・・、関連用語が難しすぎ。
便利なものなのに、それ自体の使い方より、説明の文章を解読するほうが難しい(>_<) なのでとにかく手を動かして実際にいじってみるほうがいいと思いました。

  • python
    なんか難しそうなイメージだったけど、とてもシンプルで、PHPよりむしろわかりやすい・・・。ただしPHPみたいにHTMLファイルの中に書いてすぐ表示できるわけじゃないから、PHPの次にpythonに行く人はそこが壁になりそう。あとネット上を検索しても情報がまだ少ないので、リファレンス本があると重宝しそう、さっそく週末買ってくるつもり。
  • フレームワーク
    これも凄く難しいものだと思ってた。数日泥沼を歩く状態をやったら、すっごく便利なものだとわかってきた。初めてプログラムが使えたときくらいの感動。どう便利なのか説明しようとすると難しいけど・・・。0から全部手打ちでサイトを作った経験のある人は特に便利さがわかる気がする。コンテンツ部分以外の余計な作業を代わりにやってくれる。
  • テンプレートエンジン
    プログラムとHTML部分をまぜるとごちゃごちゃして意味不明になるので、そこを切り離すための物。
    HTMLファイルを別に作っておいて、表示が変わる部分だけ、変数みたいなものをいれておく。
    すると、自動で変数みたいな部分に値を入れてHTMLを完成させてくれる。超便利。
1

Pythonの初心者向けの本「Pythonスタートブック」と「みんなのphython」を買った。

Pythonスタートブックとみんなのphython
Pythonの初心者向けの本を購入。

買ったのは、「Pythonスタートブック」と「みんなのphython」という本。
プログラムの本って大抵入門者向けの定番本が2,3冊あって、Pythonの場合はこの2冊みたい(定番本は、PHPだとやさしいPHP 第2版 (やさしいシリーズ)、Perlだと[pc-only]新版Perl言語プログラミングレッスン入門編、RubyだとたのしいRuby 第3版あたり)。本は買うかどうか迷うのに時間使うより、買って失敗したほうが結局得な場合が多いので、両方とも買ってみた。

  • Pythonスタートブック
    プログラム経験0の人を対象に書いてあるので、スイスイ読んでいける。親切丁寧な設計なので土日を利用して集中してやれば2日で最後までいける。けど、後半から出てくるサンプルが、PC上で動く亀やお掃除ロボットの話なので、ウェブアプリ関連のものを作ろうと考えてる人にとっては退屈だと思う。ただ基本的なPythonの使い方の説明はわかりやすいので、やる気があるうちにざっと最後まで目を通すと良さげ。とっつきやすい分、すぐ物足りなくなるので、使う期間は少ない本。
  • みんなのPython
    「Pythonスタートブック」ほど丁寧な本じゃない。その分もっと詳しいことも含めて全体を網羅してある。1から全部読もうとすると挫折するので、逆引き的に使い、興味がある部分だけ読んでる。
    「Pythonスタートブック」を先に読んでおくと、欲しい情報を探すにはどこを見ればいいか?やこの部分は何の意味があるのか?などの検討が付きやすくなると思う。
    逆に一冊目からこれを読むと、今読んでいる部分が何の役に立つのか?がイメージしにくくて、さらにページ数の多さにやる気が削がれる気がする。

最低限の基礎知識がわかったら、実際に動くプログラムを見ながら覚えるのが手っ取り早いので、
Google App Engine スタート ガイド: Python
を見ながら、わからない部分を本で調べつついじってみてる。
グーグルの説明はサンプルコードが短くて、そっけないくらい余計なことが書いてないとこがいいと思う、わけがわからない専門用語が多すぎだけど。
フレームワーク、テンプレートエンジン、データベースへの出し入れが全部このサンプルに入っているので、ここだけ理解できれば応用範囲は広そう。

1