xml.etree.ElementTreeを使ってRSSから記事のタイトルを取り出す

先週のエントリで、RSSフィードから記事のタイトルを表示するスクリプトを書いた。ただ、このときにはタイトルを取り出すのに正規表現を使ったから、記事のタイトルだけじゃなくてブログのタイトルも取り出されてしまっていた。
そこで、今回は xml.etree.ElementTree を使って記事のタイトルだけを取り出してみた。といっても使い方はよくわかってないんだけど。

cf. http://docs.python.jp/2/library/xml.etree.elementtree.html

import sys
import urllib
import xml.etree.ElementTree

url = sys.argv[1]

src = urllib.urlopen(url)
doc = xml.etree.ElementTree.parse(src)

for title in doc.findall(".//item/title"):
    print title.text

xml.etree.ElementTree.parse はファイル名またはファイルオブジェクトを受け取ってDOMを返してくれる。findallはXPath(?)を受け取ってエレメントを返してくれる。・・・らしい。よくわからないけどこれで何とかなった。

実行例:

^o^ > python get_feed2.py https://blog.panicblanket.com/feed
リストのスタック系メソッド
os.walk関数を使ってファイル数を列挙する
urllibモジュールの超簡単なサンプル(その3)
urllibモジュールの超簡単なサンプル(その2)
urllibモジュールの超簡単なサンプル
変数に関数と同じ名前をつけてはいけない
== 演算子と is 演算子
randomモジュール
fileinputモジュール
Rubyで点数を集計するとき、あなたはどうしてますか? をPythonで

リストのスタック系メソッド

Python でリストをスタックとして使おうとしたときにはちょっとやりにくい。popはあるけどpushがないし、shiftもunshiftもない。なのでちょっとメモ。Ruby のスタック系メソッドとの比較で書いておく。

Ruby Python
pop pop()
push(item) append(item)
shift pop(0)
unshift(item) insert(0, item)

実行例:

>>> l = ['a', 'b', 'c', 'd', 'e']
>>> l.pop()
'e'
>>> l
['a', 'b', 'c', 'd']
>>> l.append('E')
>>> l
['a', 'b', 'c', 'd', 'E']
>>> l.pop(0)
'a'
>>> l
['b', 'c', 'd', 'E']
>>> l.insert(0, 'A')
>>> l
['A', 'b', 'c', 'd', 'E']

os.walk関数を使ってファイル数を列挙する

osモジュールの wolk 関数はちょっと面白い。ディレクトリを指定して呼び出すと、中に含まれるディレクトリ名、サブディレクトリのリスト、ファイルのリストを返すジェネレータを返してくれる。典型的にはこうやって使うみたい。

import os

for base_dir, dirs, files in os.walk("."):
    何らかの処理

そこで、ディレクトリに含まれるファイル数を列挙するスクリプトを書いてみた。

import os
import sys

for base_dir, dirs, files in os.walk(sys.argv[1]):
    num = len(files)
    print "%8d %-30s" % (num, base_dir)

実行結果:

^o^ > python count_files.py .
      83  .
       8  .\.git
      10  .\.git\hooks
       1  .\.git\info
       1  .\.git\logs
       0  .\.git\logs\refs
       1  .\.git\logs\refs\heads
       0  .\.git\logs\refs\remotes
       1  .\.git\logs\refs\remotes\origin
       1  .\.git\logs\refs\remotes\u
       0  .\.git\objects
       2  .\.git\objects\00
       1  .\.git\objects\01
       3  .\.git\objects\02
       3  .\.git\objects\03
       2  .\.git\objects\04
       1  .\.git\objects\07
       1  .\.git\objects\0c
       2  .\.git\objects\0d
       1  .\.git\objects\0e
       1  .\.git\objects\0f
       3  .\.git\objects\10
       1  .\.git\objects\13
       2  .\.git\objects\14
       3  .\.git\objects\16
       2  .\.git\objects\17
       1  .\.git\objects\19
       2  .\.git\objects\1a
       3  .\.git\objects\1b
       2  .\.git\objects\1c
       1  .\.git\objects\1f
       2  .\.git\objects\21
       5  .\.git\objects\22
       5  .\.git\objects\23
       1  .\.git\objects\25
       1  .\.git\objects\29
       2  .\.git\objects\2c
       1  .\.git\objects\2e
       2  .\.git\objects\2f
       2  .\.git\objects\30
       1  .\.git\objects\33
       1  .\.git\objects\35
       1  .\.git\objects\36
       1  .\.git\objects\37
       1  .\.git\objects\39
       3  .\.git\objects\3b
       1  .\.git\objects\3c
       2  .\.git\objects\40
       1  .\.git\objects\41
       1  .\.git\objects\42
       3  .\.git\objects\43
       1  .\.git\objects\44
       1  .\.git\objects\49
       4  .\.git\objects\4a
       2  .\.git\objects\4b
       2  .\.git\objects\4d
       1  .\.git\objects\4e
       3  .\.git\objects\4f
       1  .\.git\objects\51
       2  .\.git\objects\52
       2  .\.git\objects\53
       2  .\.git\objects\54
       1  .\.git\objects\55
       1  .\.git\objects\56
       3  .\.git\objects\57
       2  .\.git\objects\58
       1  .\.git\objects\59
       2  .\.git\objects\5a
       3  .\.git\objects\5d
       2  .\.git\objects\5e
       2  .\.git\objects\5f
       1  .\.git\objects\61
       1  .\.git\objects\62
       1  .\.git\objects\66
       1  .\.git\objects\67
       3  .\.git\objects\68
       1  .\.git\objects\69
       3  .\.git\objects\6a
       2  .\.git\objects\6b
       2  .\.git\objects\6c
       1  .\.git\objects\6d
       1  .\.git\objects\6f
       1  .\.git\objects\70
       1  .\.git\objects\71
       1  .\.git\objects\72
       1  .\.git\objects\75
       1  .\.git\objects\76
       1  .\.git\objects\77
       1  .\.git\objects\78
       1  .\.git\objects\79
       1  .\.git\objects\7b
       1  .\.git\objects\7c
       2  .\.git\objects\7d
       1  .\.git\objects\7f
       2  .\.git\objects\80
       1  .\.git\objects\85
       2  .\.git\objects\86
       1  .\.git\objects\87
       1  .\.git\objects\88
       1  .\.git\objects\89
       1  .\.git\objects\8b
       2  .\.git\objects\8d
       1  .\.git\objects\8e
       1  .\.git\objects\8f
       1  .\.git\objects\91
       2  .\.git\objects\93
       1  .\.git\objects\94
       3  .\.git\objects\95
       1  .\.git\objects\96
       3  .\.git\objects\97
       1  .\.git\objects\98
       2  .\.git\objects\9a
       3  .\.git\objects\9b
       1  .\.git\objects\9c
       3  .\.git\objects\a0
       2  .\.git\objects\a3
       1  .\.git\objects\a6
       1  .\.git\objects\a7
       1  .\.git\objects\a9
       1  .\.git\objects\ac
       1  .\.git\objects\ad
       1  .\.git\objects\ae
       1  .\.git\objects\b0
       2  .\.git\objects\b1
       1  .\.git\objects\b3
       3  .\.git\objects\b4
       2  .\.git\objects\b7
       1  .\.git\objects\b9
       3  .\.git\objects\ba
       1  .\.git\objects\bb
       1  .\.git\objects\bd
       1  .\.git\objects\c1
       1  .\.git\objects\c2
       1  .\.git\objects\c4
       2  .\.git\objects\c6
       2  .\.git\objects\c8
       1  .\.git\objects\c9
       2  .\.git\objects\cb
       1  .\.git\objects\cd
       2  .\.git\objects\ce
       3  .\.git\objects\cf
       2  .\.git\objects\d0
       1  .\.git\objects\d3
       4  .\.git\objects\d4
       1  .\.git\objects\d7
       3  .\.git\objects\d8
       2  .\.git\objects\d9
       2  .\.git\objects\da
       1  .\.git\objects\db
       3  .\.git\objects\dc
       5  .\.git\objects\dd
       1  .\.git\objects\e0
       1  .\.git\objects\e2
       1  .\.git\objects\e3
       1  .\.git\objects\e6
       1  .\.git\objects\e7
       2  .\.git\objects\e9
       1  .\.git\objects\ea
       1  .\.git\objects\ec
       5  .\.git\objects\ed
       3  .\.git\objects\ee
       1  .\.git\objects\ef
       1  .\.git\objects\f0
       1  .\.git\objects\f1
       2  .\.git\objects\f2
       1  .\.git\objects\f3
       1  .\.git\objects\f4
       2  .\.git\objects\f5
       1  .\.git\objects\f8
       1  .\.git\objects\fc
       1  .\.git\objects\fd
       1  .\.git\objects\fe
       0  .\.git\objects\info
       0  .\.git\objects\pack
       0  .\.git\refs
       1  .\.git\refs\heads
       0  .\.git\refs\remotes
       1  .\.git\refs\remotes\origin
       1  .\.git\refs\remotes\u
       0  .\.git\refs\tags
      10  .\projecteuler

git のリポジトリのファイルが多いな。