<?xml version="1.0" encoding="UTF-8" ?>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns="http://purl.org/rss/1.0/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">

  <channel rdf:about="https://toucha.blog.shinobi.jp/RSS/100/">
    <title>とうちゃのPython学習日記</title>
    <link>https://toucha.blog.shinobi.jp/</link>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="https://toucha.blog.shinobi.jp/RSS/" />
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" />
    <description>　　　　　２００８年１１月１４日　開始</description>
    <dc:language>ja</dc:language>
    <dc:date>2015-05-13T06:08:05+09:00</dc:date>
    <items>
    <rdf:Seq>
      <rdf:li rdf:resource="https://toucha.blog.shinobi.jp/video_15/little%20red%20riding%20hood%20-%20f" />
      <rdf:li rdf:resource="https://toucha.blog.shinobi.jp/%E7%89%A9%E7%90%86/%E3%82%AF%E3%83%BC%E3%83%AD%E3%83%B3%E3%83%BB%E9%9B%BB%E7%95%8C%E3%83%BB%E9%9B%BB%E4%BD%8D" />
      <rdf:li rdf:resource="https://toucha.blog.shinobi.jp/%E7%89%A9%E7%90%86/%E6%96%9C%E3%82%81%E6%8A%95%E3%81%92%E4%B8%8A%E3%81%92" />
      <rdf:li rdf:resource="https://toucha.blog.shinobi.jp/xampp/linux-ubuntu-%E3%81%ABxampp%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B" />
      <rdf:li rdf:resource="https://toucha.blog.shinobi.jp/xampp/%E4%BB%8A%E6%97%A5%E3%81%8B%E3%82%89xampp%E3%81%AE%E5%B0%8E%E5%85%A5%E6%97%A5%E8%A8%98" />
      <rdf:li rdf:resource="https://toucha.blog.shinobi.jp/python%20%E5%BC%95%E7%94%A8/python%E3%81%A8django%E3%81%A7excel%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90-%E5%BC%95%E7%94%A8%EF%BC%89" />
      <rdf:li rdf:resource="https://toucha.blog.shinobi.jp/python%E3%82%8F%E3%81%8B%E3%82%93%E3%81%AA%E3%81%84%EF%BC%9F/dmz" />
      <rdf:li rdf:resource="https://toucha.blog.shinobi.jp/%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB%E3%82%B7%E3%83%BC%E3%83%88/%E5%8D%B0%E5%88%B7%E7%94%A8%E3%81%AE%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB%E3%82%B7%E3%83%BC%E3%83%88" />
      <rdf:li rdf:resource="https://toucha.blog.shinobi.jp/python%E3%82%8F%E3%81%8B%E3%82%93%E3%81%AA%E3%81%84%EF%BC%9F/linux%E3%81%A7%E3%81%AF%E3%80%81py%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%81%AB%E3%80%81%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%8C%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%84" />
      <rdf:li rdf:resource="https://toucha.blog.shinobi.jp/python%20%E5%BC%95%E7%94%A8/%E3%83%9E%E3%83%AB%E3%83%81%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E5%87%A6%E7%90%86" />
    </rdf:Seq>
    </items>
  </channel>

  <item rdf:about="https://toucha.blog.shinobi.jp/video_15/little%20red%20riding%20hood%20-%20f">
    <link>https://toucha.blog.shinobi.jp/video_15/little%20red%20riding%20hood%20-%20f</link>
    <title>Little Red Riding Hood - Full Story - Grimm&#039;s Fairy Tales</title>
    <description>
Little Red Riding Hood - Full Story - Grimm&#039;s Fairy Tales



Little Red Riding Hood - Full Story - Grimm&#039;s Fairy Tales


...</description>
    <content:encoded><![CDATA[<br />
<span style="widows: 1; text-transform: none; text-indent: 33px; display: inline !important; font: medium/24px 'MS PGothic'; white-space: normal; float: none; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><span style="font-size: large;" size="4">Little Red Riding Hood - Full Story - Grimm's Fairy Tales</span></span><br />
<iframe width="400" height="225" src="http://www.youtube.com/embed/kjKMiTX00dw" frameborder="0" allowfullscreen=""></iframe><br />
<br />
<br />
<span style="widows: 1; text-transform: none; text-indent: 33px; display: inline !important; font: medium/24px 'MS PGothic'; white-space: normal; float: none; letter-spacing: normal; color: #000000; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><span style="font-size: large;" size="4">Little Red Riding Hood - Full Story - Grimm's Fairy Tales<br />
<iframe width="400" height="225" src="http://www.youtube.com/embed/lpTs0d-Jzu4" frameborder="0" allowfullscreen=""></iframe><br />
<br />
</span></span>]]></content:encoded>
    <dc:subject>Video</dc:subject>
    <dc:date>2015-05-13T06:08:05+09:00</dc:date>
    <dc:creator>No Name Ninja</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>No Name Ninja</dc:rights>
  </item>
  <item rdf:about="https://toucha.blog.shinobi.jp/%E7%89%A9%E7%90%86/%E3%82%AF%E3%83%BC%E3%83%AD%E3%83%B3%E3%83%BB%E9%9B%BB%E7%95%8C%E3%83%BB%E9%9B%BB%E4%BD%8D">
    <link>https://toucha.blog.shinobi.jp/%E7%89%A9%E7%90%86/%E3%82%AF%E3%83%BC%E3%83%AD%E3%83%B3%E3%83%BB%E9%9B%BB%E7%95%8C%E3%83%BB%E9%9B%BB%E4%BD%8D</link>
    <title>クーロン・電界・電位</title>
    <description> </description>
    <content:encoded><![CDATA[<img alt="" src="//toucha.blog.shinobi.jp/File/ku-ron.GIF" style="width: 500px; height: 301px" />]]></content:encoded>
    <dc:subject>物理</dc:subject>
    <dc:date>2012-06-22T21:10:50+09:00</dc:date>
    <dc:creator>No Name Ninja</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>No Name Ninja</dc:rights>
  </item>
  <item rdf:about="https://toucha.blog.shinobi.jp/%E7%89%A9%E7%90%86/%E6%96%9C%E3%82%81%E6%8A%95%E3%81%92%E4%B8%8A%E3%81%92">
    <link>https://toucha.blog.shinobi.jp/%E7%89%A9%E7%90%86/%E6%96%9C%E3%82%81%E6%8A%95%E3%81%92%E4%B8%8A%E3%81%92</link>
    <title>斜め投げ上げ</title>
    <description> </description>
    <content:encoded><![CDATA[<img alt="" src="//toucha.blog.shinobi.jp/File/a3cbb29d.gif" />]]></content:encoded>
    <dc:subject>物理</dc:subject>
    <dc:date>2012-06-22T20:18:26+09:00</dc:date>
    <dc:creator>No Name Ninja</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>No Name Ninja</dc:rights>
  </item>
  <item rdf:about="https://toucha.blog.shinobi.jp/xampp/linux-ubuntu-%E3%81%ABxampp%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B">
    <link>https://toucha.blog.shinobi.jp/xampp/linux-ubuntu-%E3%81%ABxampp%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B</link>
    <title>linux(Ubuntu)にXamppをインストールする</title>
    <description>XAMPPをアンインストールするには、&amp;amp;nbsp;&amp;amp;nbsp; 

sudo rm -rf /opt/lampp 

ダウンロードしたファイルのあるディレクトリに移動する

    ダウンロードしたファイルを/optに展開します:
    sudo tar xvfz xampp-lin...</description>
    <content:encoded><![CDATA[XAMPPをアンインストールするには、&nbsp;&nbsp; <br />
<br />
<p><tt>sudo rm -rf /opt/lampp </tt></p>
<br />
ダウンロードしたファイルのあるディレクトリに移動する
<ol>
    <li>ダウンロードしたファイルを/optに展開します:
    <p><tt>sudo tar xvfz xampp-linux-1.7.2.tar.gz -C /opt</tt></p>
    </li>
</ol>
これで完了。<br />
<tt>/opt/lampp</tt>フォルダにXAMPPがインストールされました。<br />
XAMPPを起動するには、以下のコマンドをコールしてください:
<p><tt>sudo /opt/lampp/lampp start<br />
セキュリティーの設定<br />
sudo /opt/lampp/lampp security<br />
<br />
</tt></p>]]></content:encoded>
    <dc:subject>XAMPP</dc:subject>
    <dc:date>2009-12-20T12:31:26+09:00</dc:date>
    <dc:creator>No Name Ninja</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>No Name Ninja</dc:rights>
  </item>
  <item rdf:about="https://toucha.blog.shinobi.jp/xampp/%E4%BB%8A%E6%97%A5%E3%81%8B%E3%82%89xampp%E3%81%AE%E5%B0%8E%E5%85%A5%E6%97%A5%E8%A8%98">
    <link>https://toucha.blog.shinobi.jp/xampp/%E4%BB%8A%E6%97%A5%E3%81%8B%E3%82%89xampp%E3%81%AE%E5%B0%8E%E5%85%A5%E6%97%A5%E8%A8%98</link>
    <title>今日からXAMPPの導入日記</title>
    <description>
今日からXAMPPの開始
ダウンロード
&amp;amp;nbsp;http://www.apachefriends.org/jp/xampp-windows.html

インストーラを使ってインストールする使ってインストールする
&amp;amp;nbsp;トップレベルのフォルダ、例えばH:\xamppにXAMPP...</description>
    <content:encoded><![CDATA[<p><br />
今日からXAMPPの開始<br />
ダウンロード<br />
&nbsp;<a href="http://www.apachefriends.org/jp/xampp-windows.html">http://www.apachefriends.org/jp/xampp-windows.html</a><br />
<br />
インストーラを使ってインストールする使ってインストールする<br />
&nbsp;トップレベルのフォルダ、例えばH:\xamppにXAMPPを抽出<br />
&nbsp;FileZilla FTPサーバは絶対パスを要求するため、起動しません<br />
&nbsp;</p>
<p>アンインストールに約４分<br />
インストール<br />
　ドライブレターなし<br />
　localhostに接続<br />
　セキュリティーの設定<br />
以上で２５分<br />
&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    <dc:subject>XAMPP</dc:subject>
    <dc:date>2009-12-19T10:39:27+09:00</dc:date>
    <dc:creator>No Name Ninja</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>No Name Ninja</dc:rights>
  </item>
  <item rdf:about="https://toucha.blog.shinobi.jp/python%20%E5%BC%95%E7%94%A8/python%E3%81%A8django%E3%81%A7excel%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90-%E5%BC%95%E7%94%A8%EF%BC%89">
    <link>https://toucha.blog.shinobi.jp/python%20%E5%BC%95%E7%94%A8/python%E3%81%A8django%E3%81%A7excel%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90-%E5%BC%95%E7%94%A8%EF%BC%89</link>
    <title>PythonとDjangoでExcelファイルを作成(引用）</title>
    <description>PythonとDjangoでExcelファイルを作成
Chris McAvoy
海外internet.com発の記事http://mediajam.info/topic/518331


はじめに

　クライアントにデータを操作させる必要がある場合には、Excelのスプレッドシートを用...</description>
    <content:encoded><![CDATA[<div style="text-align: left; margin: 12pt 0mm" align="left"><b><span style="layout-grid-mode: both; letter-spacing: 0.6pt; color: black; font-size: 14.5pt">Python</span></b><b><span style="layout-grid-mode: both; letter-spacing: 0.6pt; color: black; font-size: 14.5pt">と</span></b><b><span style="layout-grid-mode: both; letter-spacing: 0.6pt; color: black; font-size: 14.5pt">Django</span></b><b><span style="layout-grid-mode: both; letter-spacing: 0.6pt; color: black; font-size: 14.5pt">で</span></b><b><span style="layout-grid-mode: both; letter-spacing: 0.6pt; color: black; font-size: 14.5pt">Excel</span></b><b><span style="layout-grid-mode: both; letter-spacing: 0.6pt; color: black; font-size: 14.5pt">ファイルを作成</span></b><br />
Chris McAvoy</div>
<div style="text-align: left; margin: 0mm 0mm 0pt; vertical-align: middle" align="left"><span style="layout-grid-mode: both; letter-spacing: 0.6pt; color: black; font-size: 10pt">海外</span><span style="layout-grid-mode: both; letter-spacing: 0.6pt; color: black; font-size: 10pt">internet.com</span><span style="layout-grid-mode: both; letter-spacing: 0.6pt; color: black; font-size: 10pt">発の記事http://mediajam.info/topic/518331<br />
</span></div>
<div style="border-bottom: #338ec9 1pt solid; border-left: #338ec9 6pt solid; padding-bottom: 2pt; padding-left: 3pt; padding-right: 0mm; background: white; border-top: #338ec9 1pt solid; border-right: #338ec9 6pt solid; padding-top: 3pt">
<div style="border-bottom: medium none; text-align: left; border-left: medium none; padding-bottom: 0mm; line-height: 130%; margin: 0mm 0mm 6pt; padding-left: 0mm; padding-right: 0mm; background: white; border-top: medium none; border-right: medium none; padding-top: 0mm" align="left"><b><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 17pt">はじめに</span></b></div>
</div>
<div style="text-align: left; line-height: 130%; margin: 0mm 0mm 12pt; background: white" align="left"><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　クライアントにデータを操作させる必要がある場合には、</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Excel</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">のスプレッドシートを用意するのが最も簡単です。スプレッドシートは</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Python</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">を使って簡単に作成できますし、スプレッドシートを</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Web</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">からダウンロードさせることも、</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Django</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">という</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Web</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">フレームワークを使えば簡単です。この記事ではスプレッドシートの進化の歴史について簡単に触れた後、この</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">2</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">つの操作方法について説明します。</span></div>
<div style="border-bottom: #338ec9 1pt solid; border-left: #338ec9 6pt solid; padding-bottom: 2pt; padding-left: 3pt; padding-right: 0mm; background: white; border-top: #338ec9 1pt solid; border-right: #338ec9 6pt solid; padding-top: 3pt">
<div style="border-bottom: medium none; text-align: left; border-left: medium none; padding-bottom: 0mm; line-height: 130%; margin: 12pt 0mm 6pt; padding-left: 0mm; padding-right: 0mm; background: white; border-top: medium none; border-right: medium none; padding-top: 0mm" align="left"><b><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 17pt">スプレッドシートの進化の歴史</span></b></div>
</div>
<div style="text-align: left; line-height: 130%; margin: 0mm 0mm 12pt; background: white" align="left"><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　サメは何百年もの間、あまり進化していません。その最大の理由は、野生で十分に生きていけるからです。獲物を実に上手く捕らえることができるので、サメは自らを適応させる必要も、変化する必要もなかったのです。これ以上進化させるところはないというほどに、サメは完璧な恐怖のフィッシュハンターです。</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt"><br />
<br />
</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　サメと同様に、スプレッドシートも数十年の間、あまり進化してきませんでした。サメの例と同じく、スプレッドシートもデータを実に上手く処理することができるので、ほとんど進化する必要がなかったのです。スプレッドシードでは大量のデータを扱うことができ、データをわかりやすい表形式で表示でき、プログラマでない人でも、数値の並べ替えや操作を行ってデータを分析できます。スプレッドシートは完璧な恐怖のデータハンターなのです。</span></div>
<div style="border-bottom: #338ec9 1pt solid; border-left: #338ec9 6pt solid; padding-bottom: 2pt; padding-left: 3pt; padding-right: 0mm; background: white; border-top: #338ec9 1pt solid; border-right: #338ec9 6pt solid; padding-top: 3pt">
<div style="border-bottom: medium none; text-align: left; border-left: medium none; padding-bottom: 0mm; line-height: 130%; margin: 12pt 0mm 6pt; padding-left: 0mm; padding-right: 0mm; background: white; border-top: medium none; border-right: medium none; padding-top: 0mm" align="left"><b><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 17pt">Web</span></b><b><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 17pt">アプリケーションのデータ表示</span></b></div>
</div>
<div style="text-align: left; line-height: 130%; margin: 0mm 0mm 12pt; background: white" align="left"><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　スプレッドシートはそれほど素晴らしいものなので、改良を試みて時間を無駄にするよりも、その能力を素直に認めた方が得策な場合もあります。</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Web</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">アプリケーションの機能の大半は、「データベースのデータを受け取って、それを</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Web</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">上に配置すること」です。反復的開発環境では、最初の数サイクルは「データをデータベースに入力すること」に費やされます。この段階が終わると、開発の依頼主が</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Web</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">アプリケーションにデータを表示させてみて欲しいと言い始めるでしょう。ここからが面倒なところです。</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt"><br />
<br />
</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　表示して欲しいと求められたところで、そのデータを実際にどのように操作したいのかを正確に理解しているクライアントはほとんどいません。その時点では自分で理解しているつもりなのかもしれませんが、言われたとおりにして見せると、たいていは「思っていたのと何だか違う」という反応が返ってきます。</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt"><br />
<br />
</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　これは別に、クライアントが意地悪をしているわけではありません。すべてのデータを一度に見るという経験はおそらく今まで</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">1</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">回もなかったのでしょうから、当然と言えば当然なのです。新しい形の情報をいじってみたら、今まで考えもしなかったパターンを思いついたというだけのことです。</span></div>
<div style="border-bottom: #338ec9 1pt solid; border-left: #338ec9 6pt solid; padding-bottom: 2pt; padding-left: 3pt; padding-right: 0mm; background: white; border-top: #338ec9 1pt solid; border-right: #338ec9 6pt solid; padding-top: 3pt">
<div style="border-bottom: medium none; text-align: left; border-left: medium none; padding-bottom: 0mm; line-height: 130%; margin: 12pt 0mm 6pt; padding-left: 0mm; padding-right: 0mm; background: white; border-top: medium none; border-right: medium none; padding-top: 0mm" align="left"><b><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 17pt">Excel</span></b><b><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 17pt">ファイルを提供する</span></b><b><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 17pt">Web</span></b><b><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 17pt">アプリケーション</span></b></div>
</div>
<div style="text-align: left; line-height: 130%; margin: 0mm 0mm 12pt; background: white" align="left"><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　このような経験から、筆者はできるだけ</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Excel</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">を使ってクライアントにデータを表示して見せるようにしています。データはクライアントが</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Web</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">アプリケーションからダウンロードできるようにしておきます。</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Excel</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">で自由に操作してもらった後なら、データをどのように利用し、最終的にどのように表示させたいかについて、優れたアイディアをクライアントから聞き出すことができます。時間を節約でき、製品の品質向上にもつながります。</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt"><br />
<br />
</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　「データを</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Excel</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">形式でダウンロード」ボタンを用意しておくと、データの可搬性という点でも大いに役立ちます。アプリケーションが完成に近づき、データの表示に</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Excel</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">を使用する必要がなくなったときでも、</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Excel</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">へのエクスポート機能を残しておき、ユーザーがデータをオフラインで利用できるようにしましょう。これはさまざまな難題を解決する、間違いなく魅力的な機能です。</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt"><br />
<br />
</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　スプレッドシートの素晴らしさをご理解いただいたところで、以降ではその作成方法を説明し、続いて、必要なときすぐに</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Web</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">アプリケーションからダウンロードできるようにする方法について解説します。</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt"><br />
<br />
</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　今回の例では</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Web</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">アプリケーションフレームワークに</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Django</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">を使用しますが、基本的な考え方はどのツールキットを使用する場合でも同じです。</span></div>
<div style="border-bottom: #338ec9 1pt solid; border-left: #338ec9 6pt solid; padding-bottom: 2pt; padding-left: 3pt; padding-right: 0mm; background: white; border-top: #338ec9 1pt solid; border-right: #338ec9 6pt solid; padding-top: 3pt">
<div style="border-bottom: medium none; text-align: left; border-left: medium none; padding-bottom: 0mm; line-height: 130%; margin: 12pt 0mm 6pt; padding-left: 0mm; padding-right: 0mm; background: white; border-top: medium none; border-right: medium none; padding-top: 0mm" align="left"><b><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 17pt">Python</span></b><b><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 17pt">による</span></b><b><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 17pt">Excel</span></b><b><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 17pt">スプレッドシートの作成</span></b></div>
</div>
<div style="text-align: left; line-height: 130%; margin: 0mm 0mm 12pt; background: white" align="left"><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Excel</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">のフォーマットは（言うまでもありませんが）プロプライエタリです。ただし、オープンにしようと最善を尽くしてはいるようです。コンマ区切りのファイルを</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Excel</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">で開き、</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Excel</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">のスプレッドシートとして操作することは簡単にできます。また、コンマ区切りのファイルを</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Python</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">で作成することもいたって簡単です。</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Python</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">と</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Excel</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">は</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">csv</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">ファイルを共通言語とする、最高に相性の良い組み合わせです。</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt"><br />
<br />
</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Python</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">の標準ライブラリには、優れた</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">csv</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">出力クラスが付属しています。次の短い例で、その使い方を紹介します。</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">import csv</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">w = csv.writer(open('output.csv','w'))</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">for i in range(10):</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp;w.writerow(range(10))</span></div>
<div style="text-align: left; line-height: 120%; margin: 0mm 0mm 0pt; background: #c6deef" align="left"><b><span style="line-height: 120%; layout-grid-mode: both; color: black; font-size: 12pt">編集部注</span></b></div>
<div style="text-align: left; line-height: 120%; margin: 0mm 0mm 0pt; background: #eff7ff" align="left"><span style="line-height: 120%; layout-grid-mode: both; color: black; font-size: 11.5pt">　</span><span style="line-height: 120%; layout-grid-mode: both; color: black; font-size: 11.5pt">Windows</span><span style="line-height: 120%; layout-grid-mode: both; color: black; font-size: 11.5pt">環境で上記コードを実行した場合、改行コードが複数出力される現象が確認されています。</span><span style="line-height: 120%; layout-grid-mode: both; color: black; font-size: 11.5pt"><br />
</span><span style="line-height: 120%; layout-grid-mode: both; color: black; font-size: 11.5pt">　この場合は、</span><span style="line-height: 120%; layout-grid-mode: both; color: black; font-size: 11.5pt">2</span><span style="line-height: 120%; layout-grid-mode: both; color: black; font-size: 11.5pt">行目の記述を以下のようにすれば問題を回避できます。</span><span style="line-height: 120%; layout-grid-mode: both; color: black; font-size: 11.5pt"><br />
</span><span style="line-height: 120%; layout-grid-mode: both; color: black; font-size: 11.5pt">　　　</span><span style="line-height: 120%; layout-grid-mode: both; color: black; font-size: 11.5pt">w = csv.writer(open('output.csv','w'),lineterminator=&quot;&yen;n&quot;)</span></div>
<div style="text-align: left; line-height: 130%; margin: 0mm 0mm 12pt; background: white" align="left"><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">output.csv</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">の内容は以下のようになります。</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">0,1,2,3,4,5,6,7,8,9</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">0,1,2,3,4,5,6,7,8,9</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">0,1,2,3,4,5,6,7,8,9</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">0,1,2,3,4,5,6,7,8,9</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">0,1,2,3,4,5,6,7,8,9</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">0,1,2,3,4,5,6,7,8,9</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">0,1,2,3,4,5,6,7,8,9</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">0,1,2,3,4,5,6,7,8,9</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">0,1,2,3,4,5,6,7,8,9</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">0,1,2,3,4,5,6,7,8,9</span></div>
<div style="text-align: left; line-height: 130%; margin: 0mm 0mm 12pt; background: white" align="left"><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　このファイルを</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Excel</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">で開くと、区切り文字をたずねるダイアログが表示されます。コンマを選択すればそれで完了です。</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt"><br />
<br />
</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　そうは言っても、</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">csv</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">ファイルを開く際のこの一手間が、エンドユーザーのお気に召さないこともあります。そのような場合は、</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Roman Kiseliov</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">が作成した、</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Excel</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">のバイナリファイルを</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Python</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">で作成するための素晴らしいライブラリを利用しましょう。これは</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt"><a target="_blank" href="http://sourceforge.net/projects/pyexcelerator"><span style="color: #0000cc">pyExcelerator</span></a></span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">というライブラリで、</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Sourceforge</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">のプロジェクトページから入手可能です。このライブラリは</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Windows</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">や</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Excel</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">を必要としないので、もっと簡単に実行できます。</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt"><br />
<br />
</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　前回の</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">csv</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">の例と同じく、</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">10</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">行</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">&times;10</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">列の表を</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">pyExcelerator</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">で作成してみましょう。</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">from pyExcelerator import *</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">wb = Workbook()</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">ws0 = wb.add_sheet('0')</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left">&nbsp;</div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">for x in range(10):</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp; for y in range(10):</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # writing to a specific x,y</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ws0.write(x,y,&quot;this is cell %s, %s&quot; % (x,y))</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left">&nbsp;</div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">wb.save('output.xls')</span></div>
<div style="text-align: left; line-height: 130%; margin: 0mm 0mm 12pt; background: white" align="left"><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　先ほどとスクリプトは似ていますが、いくつか重要な違いがあります。</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">pyExcelerator</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">では</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Workbook</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">オブジェクトを明示的に作成し、そこに</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Worksheet</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">オブジェクトを追加する必要があります。</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Worksheet</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">にデータを書き込むときは、書き込み先の位置を</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">x,y</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">で指定します。この方法は柔軟性に優れていますが、書き込む際に表を頭に思い浮かべることが必要になります。</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt"><br />
<br />
</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">pyExcelerator</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">の方が少し手間がかかりますが、機能という点でははるかに上です。簡単な表データの作成に加え、セルの書式設定や、</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Excel</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">の式の挿入など、</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Excel</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">でよく使われる機能はひととおり網羅しています。</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">csv</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">出力クラスでは、簡単な表を作成することしかできません。</span></div>
<div style="border-bottom: #338ec9 1pt solid; border-left: #338ec9 6pt solid; padding-bottom: 2pt; padding-left: 3pt; padding-right: 0mm; background: white; border-top: #338ec9 1pt solid; border-right: #338ec9 6pt solid; padding-top: 3pt">
<div style="border-bottom: medium none; text-align: left; border-left: medium none; padding-bottom: 0mm; line-height: 130%; margin: 12pt 0mm 6pt; padding-left: 0mm; padding-right: 0mm; background: white; border-top: medium none; border-right: medium none; padding-top: 0mm" align="left"><b><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 17pt">Django</span></b><b><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 17pt">からの</span></b><b><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 17pt">Excel</span></b><b><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 17pt">ファイルのダウンロード</span></b></div>
</div>
<div style="text-align: left; line-height: 130%; margin: 0mm 0mm 12pt; background: white" align="left"><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Excel</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">互換ファイルを</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Python</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">で作成する方法を覚えたところで、次はそのファイルを</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Django</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">でダウンロード可能にする方法を見ていきましょう。手順は簡単です。また、同じ手順でほとんどすべての種類のバイナリファイルを生成し、提供することができます。ファイルを作成できれば、それをユーザーにダウンロードさせるのは簡単です。</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt"><br />
<br />
</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　鍵を握るのは「</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">content-type</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">」という</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">HTTP</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">ヘッダーです。ブラウザからサーバー上のファイルを要求する場合、トランザクションは次のようになります。</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">GET /wp-content/uploads/2007/10/cropped-dsc_0020.jpg HTTP/1.1</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">Host: weblog.lonelylion.com</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">User-Agent:Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.11)</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp; Gecko/20071204 Ubuntu/7.10 (gutsy) Firefox/2.0.0.11</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">Accept: image/png,*/*;q=0.5</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">Accept-Language: en-us,en;q=0.5</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">Accept-Encoding: gzip,deflate</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">Keep-Alive: 300</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">Connection: keep-alive</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">Referer: http://lonelylion.com/</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left">&nbsp;</div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">HTTP/1.x 200 OK</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">Date: Sat, 02 Feb 2008 17:53:58 GMT</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">Server: Apache/1.3.37 (Unix) mod_throttle/3.1.2 DAV/1.0.3</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp; mod_fastcgi/2.4.2 mod_gzip/1.3.26.1a PHP/4.4.8 mod_ssl/2.8.22</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp; OpenSSL/0.9.7e</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">Last-Modified: Thu, 01 Nov 2007 03:22:12 GMT</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">Etag: &quot;798f213-5c88-47294664&quot;</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">Accept-Ranges: bytes</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">Content-Length: 23688</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">Keep-Alive: timeout=2, max=97</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">Connection: Keep-Alive</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">Content-Type: image/jpeg</span></div>
<div style="text-align: left; line-height: 130%; margin: 0mm 0mm 12pt; background: white" align="left"><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　最後の行の</span><span style="line-height: 130%; layout-grid-mode: both; color: maroon; font-size: 10pt">Content-Type: image/jpeg</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">に注目してください。この行は、後続のデータが何であるかをブラウザに伝えています。ブラウザはこの行に基づいて、データの表示方法や、どの外部アプリケーションを開いてデータを表示するかを判断します。</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt"><br />
<br />
</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　上記の例では</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Jpeg</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">の画像を要求しているため、</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Content-Type</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">に「</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">image/jpeg</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">」が設定されています。このヘッダーを「</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">application/ms-excel</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">」に変更すると、ファイルが</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Excel</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">で開かれます。</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Django</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">でヘッダーの記述を変更するのは非常に簡単です。以下に、</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">csv</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">ファイルをブラウザに送信し、それを</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Excel</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">で開くようブラウザに指示する</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Django</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">ビューの例を示します。</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">import csv</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">from StringIO import StringIO</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">from django.http import HttpResponse</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left">&nbsp;</div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">def show_excel(request):</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp; # use a StringIO buffer rather than opening a file</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp; output = StringIO()</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp; w = csv.writer(output)</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp; for i in range(10):</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; w.writerow(range(10))</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp; # rewind the virtual file</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp; output.seek(0)</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp; return HttpResponse(output.read(),</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mimetype='application/ms-excel')</span></div>
<div style="text-align: left; line-height: 130%; margin: 0mm 0mm 12pt; background: white" align="left"><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　最初の</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">csv</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">作成の例にいくつか修正を加えました。まず、実際にファイルを開くのではなく、ファイルに似た</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">StringIO</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">オブジェクトを使用しています。また、応答を</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Django</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">の</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">HttpResponse</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">オブジェクトでラッピングしています（</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">HttpResponse</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">オブジェクトは</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Django</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">ビュー標準の戻り値のオブジェクトタイプです）。さらに、</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">HttpResponse</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">に</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">content_type</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">を渡すことによって、</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Content-Type</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">ヘッダーを「</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">application/ms-excel</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">」に設定しています。</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt"><br />
<br />
</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　このパターンを使用して、ほとんどすべての種類のバイナリデータを</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Web</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">ブラウザから取得することができます。</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">PDF</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">、画像、音声、動画など、あらゆるデータに対して生成用のライブラリが用意されているので、</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Content-Type</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">ヘッダーの値さえわかれば、バイナリデータを生成することが可能です。</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt"><br />
<br />
</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">　それでは、同じテクニックを使って</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">pyExcelerator</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">で生成した</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">Excel</span><span style="line-height: 130%; layout-grid-mode: both; color: black; font-size: 12pt">ファイルを出力してみましょう。</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">from pyExcelerator import *</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">from django.http import HttpResponse</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left">&nbsp;</div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">def show_excel(request):</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp; wb = Workbook()</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp; ws0 = wb.add_sheet('0')</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left">&nbsp;</div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp; for x in range(10):</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for y in range(10):</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # writing to a specific x,y</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ws0.write(x,y,&quot;this is cell %s, %s&quot; % (x,y))</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left">&nbsp;</div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;wb.save('output.xls')</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp; return HttpResponse(open('output.xls','rb').read(),</span></div>
<div style="text-align: left; line-height: 10.5pt; margin: 0mm 0mm 0pt; background: #fff7d6" align="left"><span style="layout-grid-mode: both; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mimetype='application/ms-excel')</span></div>
<div style="margin: 0mm 0mm 0pt"><span style="layout-grid-mode: both; color: black; font-size: 12pt">　これもやはり、先ほどの</span><span style="layout-grid-mode: both; color: black; font-size: 12pt">pyExcelerator</span><span style="layout-grid-mode: both; color: black; font-size: 12pt">を使用して</span><span style="layout-grid-mode: both; color: black; font-size: 12pt">Excel</span><span style="layout-grid-mode: both; color: black; font-size: 12pt">ファイルを作成した例に似ています。ただこのコードには</span><span style="layout-grid-mode: both; color: black; font-size: 12pt">1</span><span style="layout-grid-mode: both; color: black; font-size: 12pt">つ難があります。一時ファイルを作成してデータを書き込み、その後あらためてファイルを開き、そこからデータを読み込んでいるのです。この方法だと、トラフィックが多い場合に問題が起こる可能性があります。また、あるユーザーがファイルを読み込んでいる間に別のユーザーがそこにアクセスすると、ファイルが破損してしまうかもしれません。ファイル名にタイムスタンプを付加するという解決方法もありますが、最も理想的なのは、</span><span style="layout-grid-mode: both; color: black; font-size: 12pt">Workbook</span><span style="layout-grid-mode: both; color: black; font-size: 12pt">の</span><span style="layout-grid-mode: both; color: black; font-size: 12pt">save</span><span style="layout-grid-mode: both; color: black; font-size: 12pt">メソッドにファイルに似たオブジェクトを渡してそこにデータを保存するという方法です。現在の</span><span style="layout-grid-mode: both; color: black; font-size: 12pt">pyExcelerator</span><span style="layout-grid-mode: both; color: black; font-size: 12pt">ではこの方法は使用できませんが、必ずパッチが提供されると予想しています。</span><span style="layout-grid-mode: both; color: black; font-size: 12pt"><br />
<br />
</span><span style="layout-grid-mode: both; color: black; font-size: 12pt">　筆者はたいていの場合、</span><span style="layout-grid-mode: both; color: black; font-size: 12pt">csv</span><span style="layout-grid-mode: both; color: black; font-size: 12pt">ファイルを「</span><span style="layout-grid-mode: both; color: black; font-size: 12pt">Content-Type: application/ms-excel</span><span style="layout-grid-mode: both; color: black; font-size: 12pt">」としてブラウザに送信します。</span><span style="layout-grid-mode: both; color: black; font-size: 12pt">StringIO</span><span style="layout-grid-mode: both; color: black; font-size: 12pt">を使用すれば実装がシンプルになりますし、ダウンロード可能なスプレッドシートの作成にかかる時間は通常</span><span style="layout-grid-mode: both; color: black; font-size: 12pt">5</span><span style="layout-grid-mode: both; color: black; font-size: 12pt">分以内なので、ほとんどのエンドユーザーはおかしいとも感じません。これでユーザーの希望はかなえられますし、すぐにデータをいじってもらうことができます。ユーザーはデータをあれこれ操作することで、彼らが実際に使用する</span><span style="layout-grid-mode: both; color: black; font-size: 12pt">HTML</span><span style="layout-grid-mode: both; color: black; font-size: 12pt">表示についてより明確なビジョンを持つようになり、的確な要求をしてくるようになるでしょう。良いことだらけです。</span></div>]]></content:encoded>
    <dc:subject>Python 引用</dc:subject>
    <dc:date>2009-10-08T10:03:51+09:00</dc:date>
    <dc:creator>No Name Ninja</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>No Name Ninja</dc:rights>
  </item>
  <item rdf:about="https://toucha.blog.shinobi.jp/python%E3%82%8F%E3%81%8B%E3%82%93%E3%81%AA%E3%81%84%EF%BC%9F/dmz">
    <link>https://toucha.blog.shinobi.jp/python%E3%82%8F%E3%81%8B%E3%82%93%E3%81%AA%E3%81%84%EF%BC%9F/dmz</link>
    <title>dmz</title>
    <description>dmzファイル </description>
    <content:encoded><![CDATA[dmzファイル<br type="_moz" />]]></content:encoded>
    <dc:subject>Pythonわかんない？</dc:subject>
    <dc:date>2009-09-20T18:13:18+09:00</dc:date>
    <dc:creator>No Name Ninja</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>No Name Ninja</dc:rights>
  </item>
  <item rdf:about="https://toucha.blog.shinobi.jp/%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB%E3%82%B7%E3%83%BC%E3%83%88/%E5%8D%B0%E5%88%B7%E7%94%A8%E3%81%AE%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB%E3%82%B7%E3%83%BC%E3%83%88">
    <link>https://toucha.blog.shinobi.jp/%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB%E3%82%B7%E3%83%BC%E3%83%88/%E5%8D%B0%E5%88%B7%E7%94%A8%E3%81%AE%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB%E3%82%B7%E3%83%BC%E3%83%88</link>
    <title>印刷用のスタイルシート</title>
    <description>スタイルシート側に

&amp;amp;nbsp;
#wrapper { 
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; margin-left: auto; 
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; margin-right: auto; 
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; width:720px; 
&amp;amp;...</description>
    <content:encoded><![CDATA[<p>スタイルシート側に<br />
<br />
&nbsp;<br />
#wrapper { <br />
&nbsp;&nbsp;&nbsp; margin-left: auto; <br />
&nbsp;&nbsp;&nbsp; margin-right: auto; <br />
&nbsp;&nbsp;&nbsp; width:720px; <br />
&nbsp;&nbsp;&nbsp; background-color: #FFF; <br />
} <br />
<br />
---------------------------------------------------------------------------------------<br />
html側に<br />
&nbsp;</p>
<pre id="line1">
&lt;html&gt;
&lt;<span class="start-tag">body</span>&gt;
&lt;<span class="start-tag">div</span><span class="attribute-name"> id</span>=<span class="attribute-value">&quot;wrapper&quot;</span>&gt;
  ・・・
  ・・・
/<span class="end-tag">div</span>&gt;
&lt;/<span class="end-tag">body</span>&gt;
&lt;/<span class="end-tag">html</span>&gt;
---------------------------------------------------------------------------------------
</pre>]]></content:encoded>
    <dc:subject>スタイルシート</dc:subject>
    <dc:date>2009-05-31T13:11:58+09:00</dc:date>
    <dc:creator>No Name Ninja</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>No Name Ninja</dc:rights>
  </item>
  <item rdf:about="https://toucha.blog.shinobi.jp/python%E3%82%8F%E3%81%8B%E3%82%93%E3%81%AA%E3%81%84%EF%BC%9F/linux%E3%81%A7%E3%81%AF%E3%80%81py%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%81%AB%E3%80%81%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%8C%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%84">
    <link>https://toucha.blog.shinobi.jp/python%E3%82%8F%E3%81%8B%E3%82%93%E3%81%AA%E3%81%84%EF%BC%9F/linux%E3%81%A7%E3%81%AF%E3%80%81py%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%81%AB%E3%80%81%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%8C%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%84</link>
    <title>Linuxでは、pyファイル名に、日本語が使えない</title>
    <description> Linuxでは、pyファイル名に、日本語が使えないのかな？？  
 
 
 
 
  python目次   </description>
    <content:encoded><![CDATA[<font size="3">Linuxでは、pyファイル名に、日本語が使えないのかな？？</font><br />
<br />
<br />
<br />
<br />
<a href="../../../../../Entry/38/"><span class="EntryTitleFont">python目次</span></a><br type="_moz" />]]></content:encoded>
    <dc:subject>Pythonわかんない？</dc:subject>
    <dc:date>2009-05-10T10:11:29+09:00</dc:date>
    <dc:creator>No Name Ninja</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>No Name Ninja</dc:rights>
  </item>
  <item rdf:about="https://toucha.blog.shinobi.jp/python%20%E5%BC%95%E7%94%A8/%E3%83%9E%E3%83%AB%E3%83%81%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E5%87%A6%E7%90%86">
    <link>https://toucha.blog.shinobi.jp/python%20%E5%BC%95%E7%94%A8/%E3%83%9E%E3%83%AB%E3%83%81%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E5%87%A6%E7%90%86</link>
    <title>マルチスレッド処理</title>
    <description>
http://www.python.jp/doc/release/tut/node13.html#SECTION0013400000000000000000
11.4 マルチスレッド処理
&amp;amp;nbsp;
スレッド処理 (threading) とは、順序的な依存関係にない複数のタスクを分割する...</description>
    <content:encoded><![CDATA[<font size="3">
<p><a href="http://www.python.jp/doc/release/tut/node13.html#SECTION0013400000000000000000">http://www.python.jp/doc/release/tut/node13.html#SECTION0013400000000000000000</a></p>
<p>11.4 マルチスレッド処理<br />
&nbsp;</p>
<p>スレッド処理 (threading) とは、順序的な依存関係にない複数のタスクを分割するテクニックです。スレッド処理は、ユーザの入力を受け付けつつ、背後で別のタスクを動かすようなアプリケーションの応答性を高めます。主なユースケースには、 I/O を別のスレッドの計算処理と並列して動作させるというものがあります。</p>
<p>以下のコードでは、高水準のモジュール <a href="http://www.python.jp/doc/release/lib/module-threading.html" class="ulink"><tt class="module">threading</tt></a> でメインのプログラムを動かしながら背後で別のタスクを動作させられるようにする方法を示しています:</p>
<p>&nbsp;</p>
<div class="verbatim">
<pre>
    import threading, zipfile

    class AsyncZip(threading.Thread):
        def __init__(self, infile, outfile):
            threading.Thread.__init__(self)        
            self.infile = infile
            self.outfile = outfile
        def run(self):
            f = zipfile.ZipFile(self.outfile, 'w', zipfile.ZIP_DEFLATED)
            f.write(self.infile)
            f.close()
            print 'Finished background zip of: ', self.infile

    background = AsyncZip('mydata.txt', 'myarchive.zip')
    background.start()
    print 'The main program continues to run in foreground.'
    
    background.join()    # Wait for the background task to finish
    print 'Main program waited until background was done.'
</pre>
</div>
<p>マルチスレッドアプリケーションを作る上で最も難しい問題は、データやリソースを共有するスレッド間の調整 (coordination) です。この問題を解決するため、 <tt class="module">threading</tt> モジュールではロックやイベント、状態変数、セマフォといった数々の同期プリミティブを提供しています。</p>
<p>こうしたツールは強力な一方、ちょっとした設計上の欠陥で再現困難な問題を引き起こすことがあります。したがって、タスク間調整では <a href="http://www.python.jp/doc/release/lib/module-Queue.html" class="ulink"><tt class="module">Queue</tt></a> モジュールを使って他のスレッドから一つのスレッドにリクエストを送り込み、一つのリソースへのアクセスをできるだけ一つのスレッドに集中させるアプローチを勧めます。スレッド間の通信や調整に<tt class="class">Queue</tt> オブジェクトを使うと、設計が容易になり、可読性が高まり、信頼性が増します。</p>
<p>&nbsp;</p>
<h1><a name="SECTION0013500000000000000000"></a><a name="logging"></a><br />
11.5 ログ記録</h1>
<p><a href="http://www.python.jp/doc/release/lib/module-logging.html" class="ulink"><tt class="module">logging</tt></a> モジュールでは、数多くの機能をそなえた柔軟性のあるログ記録システムを提供しています。最も簡単な使い方では、ログメッセージをファイルや <code>sys.stderr</code> に送信します:</p>
<p>&nbsp;</p>
<div class="verbatim">
<pre>
    import logging
    logging.debug('Debugging information')
    logging.info('Informational message')
    logging.warning('Warning:config file %s not found', 'server.conf')
    logging.error('Error occurred')
    logging.critical('Critical error -- shutting down')
</pre>
</div>
<p>上記のコードは以下のような出力になります:</p>
<p>&nbsp;</p>
<div class="verbatim">
<pre>
    WARNING:root:Warning:config file server.conf not found
    ERROR:root:Error occurred
    CRITICAL:root:Critical error -- shutting down
</pre>
</div>
<p>デフォルトでは、単なる情報やデバッグメッセージの出力は抑制され、出力は標準エラーに送信されます。選択可能な送信先には、email、データグラム、ソケット、 HTTP サーバへの送信などがあります。新たにフィルタを作成すると、<tt class="constant">DEBUG</tt>, <tt class="constant">INFO</tt>, <tt class="constant">WARNING</tt>, <tt class="constant">ERROR</tt>, <tt class="constant">CRITICAL</tt> といったメッセージのプライオリティに従って配送先を変更できます。</p>
<p>ログ記録システムは Python から直接設定できますし、アプリケーションを変更しなくてもカスタマイズできるよう、ユーザが編集できる設定ファイルでも設定できます。</p>
<p>&nbsp;</p>
<h1><a name="SECTION0013600000000000000000"></a><a name="weak-references"></a><br />
11.6 弱参照</h1>
<p>Python は自動的にメモリを管理します (ほとんどのオブジェクトの参照回数をカウントし、ガベージコレクションによって循環参照を除去します)。オブジェクトに対する最後の参照がなくなってしばらくするとメモリは解放されます。</p>
<p>このようなアプローチはほとんどのアプリケーションでうまく動作しますが、中にはオブジェクトをどこか別の場所で利用するまでの間だけ追跡しておきたい場合もあります。残念ながら、オブジェクトを追跡するだけでは、オブジェクトに対する恒久的な参照を作ることになってしまいます。 <a href="http://www.python.jp/doc/release/lib/module-weakref.html" class="ulink"><tt class="module">weakref</tt></a> モジュールでは、オブジェクトを参照を作らずに追跡するためのツールを提供しています。弱参照オブジェクトが不要になると、弱参照 (weakref) テーブルから自動的に除去され、コールバック関数がトリガされます。弱参照を使う典型的な応用例には、作成コストの大きいオブジェクトのキャッシュがあります:</p>
<p>&nbsp;</p>
<div class="verbatim">
<pre>
    &gt;&gt;&gt; import weakref, gc
    &gt;&gt;&gt; class A:
    ...     def __init__(self, value):
    ...             self.value = value
    ...     def __repr__(self):
    ...             return str(self.value)
    ...
    &gt;&gt;&gt; a = A(10)                   # create a reference
    &gt;&gt;&gt; d = weakref.WeakValueDictionary()
    &gt;&gt;&gt; d['primary'] = a            # does not create a reference
    &gt;&gt;&gt; d['primary']                # fetch the object if it is still alive
    10
    &gt;&gt;&gt; del a                       # remove the one reference
    &gt;&gt;&gt; gc.collect()                # run garbage collection right away
    0
    &gt;&gt;&gt; d['primary']                # entry was automatically removed
    Traceback (most recent call last):
      File &quot;&lt;pyshell#108&gt;&quot;, line 1, in -toplevel-
        d['primary']                # entry was automatically removed
      File &quot;C:/PY24/lib/weakref.py&quot;, line 46, in __getitem__
        o = self.data[key]()
    KeyError: 'primary'
</pre>
</div>
<p>&nbsp;</p>
<h1><a name="SECTION0013700000000000000000"></a><a name="list-tools"></a></h1>
</font>]]></content:encoded>
    <dc:subject>Python 引用</dc:subject>
    <dc:date>2009-04-18T08:25:16+09:00</dc:date>
    <dc:creator>No Name Ninja</dc:creator>
    <dc:publisher>NINJA BLOG</dc:publisher>
    <dc:rights>No Name Ninja</dc:rights>
  </item>
</rdf:RDF>
