Python で HTML ファイルを出力する

programming Python

Python に HTML を埋め込み、出力するサンプルコードです。PythonでHTMLを生成します。
必要最小限の知識で理解できるようまとめておくことにします。

以下の環境で動作確認をしています。

環境: Windows パソコン、Python 3.X

背景 ~ ライブラリなどを何も使わずに HTML を出力したい!

Python でプログラミングをしていると、新たなパッケージやライブラリをインストールすることなく、また、ウェブサーバーなどの特殊環境なしで、HTML ファイルを書き出したくなることがあります。

ブラウザは、今はほとんどのパソコンやスマートフォンに備わっています。SDカードなりハードディスクなりに HTML さえ書き出すことができれば、よく使う図表や数値、デザインなどを出力しておくことで、いろいろな機器で自由に参照できることになります。

そこで、最もベーシックな例として、Python のスクリプトに HTML を埋め込んで出力する方法についてまとめ、公開しておくことにします。
本来、もっと高度な方法はいくらでもあるとは思いますが、ネット検索をしたところ、高度な段階に行く前段の、当たり前の事例があまり見つかりませんでした。そこで、スクリプトとポイントを整理しておくことにします。

設定方法

① パソコン内に任意のフォルダを作成してください。
例: C:\user
② その中に html1.py 等の名前のテキストファイルを作成し、下記のスクリプトをコピー&ペーストして保存してください。
例: C:\user\html1.py

使い方

③ コンソール(または開発環境)を起動し、上記の Python スクリプト html1.py を実行してください。
例: python C:\user\html1.py
→ HTML ファイル(html1.html)が①のフォルダに生成されます。

html1.html をダブルクリックして、ブラウザで確認してください。
→ ”Hello HTML!” 等と表示されたら成功です!

うまく動いたら

・ うまく動いたら、スクリプトで “hello html”、”hello html!” などとなっている部分を書き換え、③を再度実行してみてください。
・ 要領がわかったら、HTML の部分についても書き換えて、ページのデザインを洗練させてみるなど、アレンジしてみてください。
・ 生成した HTML ファイルは、SD カードにコピーしたり、メールで送信するなどにより、スマートフォンや Linux など、他の機器でも参照できるようになります。
日頃、よく参照する情報を HTML 化してお気に入りなどに登録しておくことで、ブラウザから参照することが可能になります。

サンプルコードの説明

PythonでHTMLの埋め込み

・ サンプルコードは、Python のスクリプトに HTMLのテンプレートを書いておき、出力する事例です。
うまく動いたら、HTMLファイルをテンプレートとして別ファイルで用意しておき、読み込むように修正してもよいと思います。
・ def write1() としたところで、テキストファイルを出力するための汎用な関数を定義しています。スクリプトの後半で HTML ファイルを出力するときに使います。
・ Pythonでhtmlを書く場合は、スクリプトの str1 = ”’   …    ”’ で示したように、まず、シングルクオーテーション( ‘ )を3つを重ねた記号( ”’ )で文字列を囲みます。
その中に、文字列を書きます。文字列は HTML に限らず、任意の文字列を定義できます。この中には改行を入れることができ、そのまま文字列として定義できます。
・ 具体的には、str1 = ”’ … ”’.format( ) としたところで、ベタ書きのテキストを書き、テンプレートとする HTML の文字列を作っています。HTML の流儀に従い、ヘッダー <head></head><html></html> や body <body></body> 等を含む、複数行のHTMLのコードをテキストとしてそのまま埋め込んでいます。
・ ここでは、CSS も何も使っていない、最もシンプルな HTML ファイルとしています。
このテンプレートに、書式などを入れ込んでいけば、より複雑な HTML を埋め込み、出力できます。

テンプレートに文字列を差し込む

・ 加えて、よく使う事例として、このテンプレートに文字列を差し込むようにしています。
・ 具体的には、テンプレートとなる文字列 str1 の中に {title1}、{body1} を入れています。そして、.format() のカッコ内で定義しているように、{title1} 、{body1} の部分に、2つの文字列をそれぞれ差し込んでいます。
いまは、”hello html”、”hello html!” という2つの文字列を差し込んでいます。
サンプルを動かしてみて、うまく動いたらこの文字列や文字列の個数を変更してみてください。
・ Python のプログラムで、動的に HTML ファイルの内容を変えて出力したい場合は、この部分を修正すればよいことになります。

HTML を出力し、ブラウザで表示できるようにする

・ 続いて、生成した HTML の文字列 str1 を、print() 関数でコンソールに出力しています。HTML の出力をカスタマイズしたければ、この部分を修正すればよいです。
・ さらに、”html1.html” というファイル名を定義し、スクリプトが入っているフォルダ内に上記の HTML の文字列を書き出しています。
・ この出力された HTML ファイルをダブルクリックすれば、ブラウザで参照できるようになります。Pythonから変数や図表をHTMLを使用して出力し、ブラウザで表示することができます。
・ 別途、Webサーバーを動かすのであれば、ドキュメントルート内にこの HTML ファイルを出力しておけば、スタティックな HTML については表示できることになります。
・ コンソールで出力すれば十分か、テキストファイルとして出力したいか、あるいは Webサーバーで動的な処理をしたいか、などに応じて不要な部分は削除し、修正してください。

まとめ

PythonでHTMLを出力するスクリプトについてまとめました。

たかだか30行程度のプログラムで、Python からHTMLファイルを出力し、ブラウザで表示できるようになります。
文字列やファイル名を変えて HTML の部分のデザインを発展させたり、Python 側の処理を高度化するなど、自由に応用できることになります。

なお、ここで示したサンプルは、HTML を埋め込んだだけの最もシンプルな事例です。
Webサーバーも、JavaScript も、CSS すらも、使っていません。

今回の内容を発展させて、カレンダーや棒グラフ、折れ線グラフ、図表などを出力する事例についてもまとめ、下記の関連リンクで公開しています。
また、Python の機能を使ってWebサーバー化して、HTMLからPythonを動かす、ネット上のHTMLを取得、解析、自動化する方法などについてもまとめています。
もしも関心があるようでしたら、参考にしてみてください。

関連リンク
・ HTML のカレンダーを生成する 【Python】
・ HTML の棒グラフを出力する【Python】
・ HTML の折れ線グラフを出力する 【Python】
・ HTML で図形を出力する 【Python】
・ CSV ファイルを HTML の表に変換する 【Python】
・ Python で自由曲線を描く 【HTML & SVG】
・ Python で Web サーバーを動かす 【Windows】
・ Webサーバーで動く Python アプリ 【Windows】
・ ウェブ検索と結果の取得を自動化する【Python & selenium】

サンプルコード html1.py

import os

def write1( file1, str1 ): 
    with open( file1, 'w', encoding='utf-8' ) as f1: 
        f1.write( str1 ) 
    return 0 

str1 = '''
<html>
<head>
<meta charset="utf-8">
<title>{title1}</title>
</head>
<body>
{body1} 
</body>
</html>
'''.format( title1 = "hello html", body1 = "hello html!" ) 

print( str1 ) 

path1 = os.path.dirname(__file__) + "/" 
file1 = path1 + "html1.html" 
write1( file1, str1 ) 
タイトルとURLをコピーしました