2012年10月26日金曜日

python - etree を使った xml 解析


このエントリーをはてなブックマークに追加
SAX よりも直感的

from xml.etree.ElementTree import parse
# 読み込み
mapping = {}
tree = parse('books.xml')
for B in tree.findall('book'):
    isbn = B.attrib['isbn']
    for T in B.findall('title'):
        mapping[isbn] = T.text
        
pprint.pprint(mapping)

# 書き込み。文字コードを指定し xml_declaration=True にすると、
# 先頭に宣言() が入る
tree.write('out.xml', encoding="utf-8", xml_declaration=True)

2012年10月25日木曜日

Book - 『ぼくが愛したゴウスト』 by 打海文三


このエントリーをはてなブックマークに追加
『3652』で紹介されていたのを見て手にしてみたけど、面白かった。

ストーリーも良かったけど、文体が読みやすくて気に入ったから
この作家の本は他にも読んでみたいと思う。

python - SAX を使った xml のパース


このエントリーをはてなブックマークに追加
パースされている最中に呼ばれる関数を実装する。
自前で状態を保存しなければならないので、入れ子が多いなど複雑なファイルのパースには向きそうにない。

import xml.sax, xml.sax.handler, pprint

class BookHandler(xml.sax.handler.ContentHandler):
    
    def __init__(self):
        self.inTitle = False
        self.mapping = {}
    
    def startElement(self, name, attributes):
        if name == 'book':
            self.buffer = ""
            self.isbn = attributes["isbn"]
        elif name == "title":
            self.inTitle = True
    
    def characters(self, data):
        if self.inTitle:
            self.buffer += data
    
    def endElement(self, name):
        if name == "title":
            self.inTitle = False
            self.mapping[self.isbn] = self.buffer

parser = xml.sax.make_parser()
handler = BookHandler()
parser.setContentHandler(handler)
parser.parse('books.xml')
pprint.pprint(handler.mapping)
print handler.mapping

2012年10月21日日曜日

Book - 『3652』 by 伊坂幸太郎


このエントリーをはてなブックマークに追加
伊坂幸太郎のエッセイ集。
面白かった。人の考え方を読むことは楽しい。
作家としてのプロ意識みたいな物もすごく感じられた。
特に以下のエッセイがお気に入り。

  • 「亡くなったけれど、ベンチにいる」人たちの声が聞こえる短編集
野球は生きていくことに似ているかもしれない。打席に立つのは一人だけど、一人で闘っているわけではない。という例えが気に入った。

  • 武田幸三という格闘家の存在
抽象的な「何か」を伝えられるカッコいい人の話

  • 十年目に考えたこと。
読書を旅に置き換え、場所や観光スポットの「ルート」をストーリーに、文体や語り方を乗り物の種類や旅の仕方に例えて、双方それぞれ重要さを説明。自分がどういう旅行を提供したいかを自問している。

2012年10月20日土曜日

python - sqlite3 : テーブル一覧の取得


このエントリーをはてなブックマークに追加
sqlite_master から type="table" を select する
import sqlite3

conn = sqlite3.connect('sq.db')
cursor = conn.cursor()
cursor.execute('select * from sqlite_master WHERE type="table"')
for item in cursor.fetchall():
    print item

python - sqlite3 を使う


このエントリーをはてなブックマークに追加
connect  して cursor を作成してコマンドを実行する。
import sqlite3

conn = sqlite3.connect('sq.db')
cursor = conn.cursor()

cursor.execute('drop table people')

create_table_command = 'create table people (name char(30), age int(4))'

cursor.execute(create_table_command)

cursor.execute('insert into people values (?, ?)', ('Aoki',50))
cursor.executemany('insert into people values (?, ?)', [('Ishikawa', 70), ('Ueno', 40)])

conn.commit()

cursor.execute('select * from people')
print cursor.fetchall()

cursor.execute('select * from people where age >= 50')
print cursor.fetchall()

cursor.execute('update people set age=? where name = ?', (51, 'Aoki'))
cursor.execute('select * from people where age >= 50')
print cursor.fetchall()

Blogger - SyntaxHighlighter の導入


このエントリーをはてなブックマークに追加
参考
BloggerにおけるSyntaxHighlighterの使い方
SyntaxHighlighter 行番号折り返し問題


テンプレートに以下の内容を追加。
一番下の css は Chrome で行数表示がバグってしまう問題に対応するためのもの。