もう12月ですよ。
月日の経つのは早い早い…。
つい先ほど浅草で飲んできました。
一緒に飲んだのはプログラミング大好きな友人(・∀・)
途中、Pythonの話になったので「urlparse」と「optparse」を紹介してみた。
optparseを知っている人は結構いそうだけど、
urlparseは意外と知られていない気がする。
というわけで、簡単に紹介。
urlparseはURL形式の文字列を操作しやすくしてくれるモジュールです。
例えば、↓のような文字列。
‘http://www.google.co.jp/search?gcx=c&sourceid=chrome&ie=UTF-8&q=googlemap’
これをURLとして扱いやすくしませう。
あ、このモジュールはPython2.6.xからは標準で入っているはず…。
[shell]
>>> from urlparse import urlparse, parse_qs, urljoin
>>> url = ‘http://www.google.co.jp/search?gcx=c&sourceid=chrome&ie=UTF-8&q=googlemap’
>>> parsed = urlparse(url) # パースする
# こんな感じに解析してくれます(・∀・)
>>> print parsed
ParseResult(scheme=’http’, netloc=’www.google.co.jp’, path=’/search’, params=”, query=’gcx=c&sourceid=chrome&ie=UTF-8&q=googlemap’, fragment=”)
>>> print parsed.netloc
www.google.co.jp
>>> print parsed.query
gcx=c&sourceid=chrome&ie=UTF-8&q=googlemap
# パラメータも、parse_qs使うと辞書にしてくれます。
>>> params = parse_qs(parsed.query, True)
>>> print params
{‘sourceid’: [‘chrome’], ‘gcx’: [‘c’], ‘ie’: [‘UTF-8’], ‘q’: [‘googlemap’]}
[/shell]
知っておくとURL文字列を処理するときにすごく楽ですよ(・∀・)!オススメ。
あ、urljoinってのもあります。
[shell]
>>> url = ‘http://aaa.bbb.com/ddd/eee.html?hoge=fuga’
>>> print urljoin(url, ‘fff.html’)
http://aaa.bbb.com/ddd/fff.html
>>> print urljoin(url, ‘../ggg.html’)
http://aaa.bbb.com/ggg.html
>>> print urljoin(url, ‘/js/script.js’)
http://aaa.bbb.com/js/script.js
[/shell]
使いやすいですよ!
optparseは、バッチなど、コマンドラインで使うようなpythonを書いている人なら知ってるかと思います。
コマンド解析器ですね(・ω・)。結構使いやすいです。
以下、簡単なスクリプト。
test.py
[py]
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from optparse import OptionParser
if __name__ == ‘__main__’:
""" コマンドエラー時に表示する文字列 """
usage = u’%prog [Args] [Options]\nDetailed options -h or –help’
version = 0.1
parser = OptionParser(usage=usage, version=version)
""" test.py -d 20111201 のように、オプションの後に整数値を入力させたい場合 """
parser.add_option(
‘-d’, ‘–date’,
action = ‘store’,
type = ‘int’, # 受け取る値の型を指定する
dest = ‘download_date’, # 保存先変数名
help = ‘Set date(yyyymmdd) you want to download.(ex.20110811)’ # –help時に表示する文(見れば分かるかw)
)
""" 文字列が欲しい場合 (test.py -f hoge.txt) """
parser.add_option(
‘-f’, ‘–file’,
action = ‘store’,
type = ‘str’, # 型指定
dest = ‘file_name’, # 保存先変数名
help = ‘Set filename (ex. hoge.txt)’
)
""" -s を指定した場合、trueを保存する """
parser.add_option(
‘-s’, ‘–sleep’,
action = ‘store_true’, # store_trueの場合、Trueが’dest’で指定された変数へ格納される。(false時はstore_false)
dest = ‘hoge_flg’,
help = ‘set sleep flag’
)
""" 各オプションのデフォルト値をセット """
parser.set_defaults(
download_date = None,
file_name = None,
hoge_flg = False
)
""" オプションをパース """
options, args = parser.parse_args()
""" 単純な引数(例: test.py a b)はargs[index]で取得できる """
if len(args) > 0:
for i, v in enumerate(args):
print ‘Args[%s] is: %s’ % (i, v)
""" オプションで指定した値は options.<変数名>で取得できる """
date = options.download_date
if date:
if len(str(date)) != 8:
# エラーを発生させるときは↓こんな感じ
parser.error(‘Date must be yyyymmdd’)
print ‘date: %s, file: %s, sleep: %s’ % (options.download_date, options.file_name, options.hoge_flg)
[/py]
このファイルを –help オプションをつけて実行すると
[shell]
$ python test.py –help
Usage: test.py [Args] [Options]
Detailed options -h or –help
Options:
–version show program’s version number and exit
-h, –help show this help message and exit
-d DOWNLOAD_DATE, –date=DOWNLOAD_DATE
Set date(yyyymmdd) you want to download.(ex.20110811)
-f FILE_NAME, –file=FILE_NAME
Set filename (ex. hoge.txt)
-s, –sleep set sleep flag
[/shell]
このように、自動で説明文を生成してくれます。
parser.add_option の type で型を指定しておくと、
指定外の入力値の時に自動で弾いてくれます。
[shell]
$ python test.py -d abc
Usage: test.py [Args] [Options]
Detailed options -h or –help
test.py: error: option -d: invalid integer value: ‘abc’
[/shell]
Pythonでバッチ書く場合はオススメ(・∀・)
というわけで、使ってみて下さいね!!
さて寝よう。眠いし。
1件のコメント