home changes contents help options

076:いろいろなテキストフォーマットを解析

日付と時刻

198:文字列を日時に変換する を参照してください。

CSV, XML, YAML, HTML

次のレシピを参照してください。

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 258Docutils のサイトを参照してください。

Python のソースコード

次のライブラリリファレンスを参照してください。