076:いろいろなテキストフォーマットを解析
日付と時刻
198:文字列を日時に変換する を参照してください。
URI (URL)
URI (URL) は urlparse モジュールで解析できます。
>>> import urlparse >>> uri = urlparse.urlparse( ... u'http://user:pass@www.example.com:80/path/to/file?q=query#part') >>> uri ParseResult(scheme=u'http', netloc=u'user:pass@www.example.com:80', path=u'/path /to/file', params='', query=u'q=query', fragment=u'part') >>> uri.hostname u'www.example.com' >>> uri.port 80 >>> uri.path u'/path/to/file' >>> uri.query u'q=query' >>> uri.username u'user' >>> uri.password u'pass'
メール
メールは email モジュールで解析できます。
# coding: utf-8
from email.feedparser import FeedParser
from email.header import decode_header
from email.utils import parseaddr
text = u"""From: Minero Aoki <aamine@loveruby.net>
To: Taro Yamada <taro@example.com>
Subject: Re: =?iso-2022-jp?B?GyRCJFAkMBsoQg==?=
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp
すみません、バグです。
""".encode('iso-2022-jp')
def main():
parser = FeedParser()
parser.feed(text)
mail = parser.close()
print mail['From']
print mail['To'] # すべての To にアクセスするには
# mail.get_all('To') とする。
# インデックスアクセスでは 1 つしか取得できない。
print parseaddr(mail['From'])
print parseaddr(mail['To'])
print
print repr(mail['Subject'])
h_subject = decode_header(mail['Subject'])
print h_subject
subject = u''.join(
message.decode(coding) if coding else message
for message, coding in h_subject)
print subject
print
payload = mail.get_payload()
print repr(payload)
charset = mail.get_content_charset()
print charset
print payload.decode(charset)
if __name__ == '__main__':
main()
Minero Aoki <aamine@loveruby.net>
Taro Yamada <taro@example.com>
('Minero Aoki', 'aamine@loveruby.net')
('Taro Yamada', 'taro@example.com')
'Re: =?iso-2022-jp?B?GyRCJFAkMBsoQg==?='
[('Re:', None), ('\x1b$B$P$0\x1b(B', 'iso-2022-jp')]
Re:ばぐ
'\x1b$B$9$_$^$;$s!"%P%0$G$9!#\x1b(B\n'
iso-2022-jp
すみません、バグです。
reStructuredText
reStructuredText とは、プレーンテキストとしての読みやすさと、文書構造の表現のしやすさの両立をめざした文章形式です。この文章も reStructuredText で書かれています。
reStructuredText を処理するツールとしては Docutils があります。
ここでは Docutils に含まれているフロントエンドの一つ、 rst2html.py を紹介します。 rst2html.py は reStructuredText を HTML に変換します。以下は rst2html.py に対する入力例と、その出力です。
入力 (RestructuredText?)
076:いろいろなテキストフォーマットを解析 ================================================== 日付と時刻 -------------------------------- [198:文字列を日時に変換する] を参照してください。
出力 (XHTML 1.0)
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" /> <title>076:いろいろなテキストフォーマットを解析</title> <style type="text/css"> /* 中略。 ここには CSS が入る。 */ </style> </head> <body> <div class="document" id="id1"> <h1 class="title">076:いろいろなテキストフォーマットを解析</h1> <h2 class="subtitle" id="id2">日付と時刻</h2> <p>[198:文字列を日時に変換する] を参照してください。</p> </div> </body> </html>
reStructuredText の仕様および Docutils の設計方針、使用法を詳しく知るには、 PEP 258 や Docutils のサイトを参照してください。
Python のソースコード
次のライブラリリファレンスを参照してください。
- [http://docs.python.org/library/language.html]? (英語)
- [http://www.python.jp/doc/release/lib/language.html]? (日本語)