home changes contents help options

Edit history

Edit: -1 of 1
Time: 2009-12-02 13:41:49
Note: /zope/ZWiki/076_e3_81_84_e3_82_8d_e3_81_84_e3_82_8d_e3_81_aa_e3_83_86_e3_82_ad_e3_82_b9_e3_83_88_e3_83_95_e3_82_a9_e3_83_bc_e3_83_9e_e3_83_83_e3_83_88_e3_82_92_e8_a7_a3_e6_9e_90/edit

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

日付と時刻
--------------------------------

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


CSV, XML, YAML, HTML
--------------------------------

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

- [077:カンマ区切りCSVを処理する]
- [078:XMLを解析する]
- [079:YAMLを解析する]
- [080: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 258`_ や `Docutils`_ のサイトを参照してください。

Python のソースコード
--------------------------------

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

- [http://docs.python.org/library/language.html] (英語)
- [http://www.python.jp/doc/release/lib/language.html] (日本語)


.. _`urlparse`: http://www.python.jp/doc/release/lib/module-urlparse.html
.. _`email`: http://www.python.jp/doc/release/lib/module-email.html
.. _`Docutils`: http://docutils.sourceforge.net/
.. _`PEP 258`: http://www.python.org/dev/peps/pep-0258/