>
図書館情報技術論
>
2
Python を用いたファイル操作
1. print の応用
- 複数の値は、コンマで区切る。
- 標準設定では、半角スペースを空けて表示される。
- 入力する値としては、文字と数値の両方が混在してもよい。
サンプルファイル「py201.ipynb」
# -*- coding: utf-8 -*-
print("宮沢賢治","1896","年生まれ")
print("宮沢賢治",1896,"年生まれ")
- print が2行あり、上の例は、すべての値が文字の場合の例。
- 下の例は、「宮沢賢治」と「年生まれ」が文字、「1896」が数値の例。
- 実行すると、以下のように表示される。
宮沢賢治 1896 年生まれ
宮沢賢治 1896 年生まれ
- 文字と文字は、プラスで連結できる。
- 連結した文字は、連続して表示される。
- 上の例で、コンマをプラスに書き直し、実行してみると、値の間の空白がなくなる。
▼書き直したプログラム
print("宮沢賢治"+"1896"+"年生まれ")
▼実行結果
宮沢賢治1896年生まれ
- 文字と数値をプラスで結ぶと、エラーになる。
- 下の例で、コンマをプラスに書き直し、実行してみると、以下のエラーが出る。
▼書き直したプログラム
print("宮沢賢治"+1896+"年生まれ")
▼実行結果
TypeError Traceback (most recent call last)
~\***\***\***/***/***.py in
2
3 print("宮沢賢治"+"1896"+"年生まれ")
----> 4 print("宮沢賢治"+1896+"年生まれ")
TypeError: can only concatenate str (not "int") to str
- このような問題を解消するために、文字と数値とを変換することができるようになっている。
- 数字を文字にするときは、str() を使う。
- 文字を数字にするときは、int() を使う。
- ここで、str() を使って、下の例を書き直し、実行してみると、エラーが出なくなる。
▼書き直したプログラム
print("宮沢賢治"+str(1896)+"年生まれ")
▼実行結果
宮沢賢治1896年生まれ
- 逆に、上の例の "1896" を int("1896") と書き換えると、エラーが出てしまう。
▼書き直したプログラム
print("宮沢賢治"+int("1896")+"年生まれ")
▼実行結果
TypeError Traceback (most recent call last)
~\***\***\***/***/***.py in
1 # -*- coding: utf-8 -*-
2
----> 3 print("宮沢賢治"+int("1896")+"年生まれ")
4 print("宮沢賢治"+str(1896)+"年生まれ")
TypeError: can only concatenate str (not "int") to str
- ここで、意味的には違ったものになるが、プラスをコンマに書き換えると、連結が解除されて、エラーは出なくなる。
▼書き直したプログラム
print("宮沢賢治",int("1896"),"年生まれ")
▼実行結果
宮沢賢治 1896 年生まれ
- この int("1896") は数値なので、加減乗除が可能。
- ここで仮に int("1896") に 5 を足してみると、次のようになり、エラーは出ないので、確かに数値に変換されていることが分かる。
▼書き直したプログラム
print("宮沢賢治",int("1896")+5,"年生まれ")
▼実行結果
宮沢賢治 1901 年生まれ
- ここで、コンマ記号やプラス記号を使い、print の内容をいろいろ書き換えて、実行してみること。
2. 変数
- 変数とは、名前の付いた箱がある、というようなイメージ。
- 変数の中には、データを格納しておくことができる。
- 格納しておいたデータは、変数を使って呼び出すことができる。
- 一度格納したデータを、別のデータに取り換えることもできる。
変数の使い方
- 変数にデータを格納するときには、イコール記号「=」で結んで記述する。
変数 = データ
変数の名前
- 変数の名前は、作成者が自由に決めてよいが、できればプログラムを見た時に分かりやすいように、データの内容と関係するものが望ましい。
- (例)著者名に使う変数の場合、「chosha」や「author」のように。
- なお、名前に使う文字には、ある程度の制限がある。
- 変数の名前に使うことができるものには、次のようなものがある。
半角のアルファベット
半角の数字 (ただし先頭は不可)
半角のアンダースコア「_」
- 変数の名前に使ってはいけないものには、次のようなものがある。
先頭が数字
アンダースコア「_」以外の記号
「print」や「if」など、Python で特別な意味を持つ用語
- [参考リンク] Python の用語については、下記参照
- 全角文字は、ルール上は使えるはずだが、エラーになる場合があるので使わない方がよい。
サンプルファイル「py202.ipynb」
- 以下のように、2つの変数「chosha」と「daimei」が入力されている。
# -*- coding: utf-8 -*-
chosha="宮沢賢治"
daimei="銀河鉄道の夜"
print(chosha,daimei)
print(chosha,"「",daimei,"」")
宮沢賢治 銀河鉄道の夜
宮沢賢治 「 銀河鉄道の夜 」
- 変数は、システム的に許容されるものであれば、何を用いてもよい。
- ここで、3個所に出てくる変数「chosha」を、1文字だけの「c」としてみる。
▼書き直したプログラム
c="宮沢賢治"
daimei="銀河鉄道の夜"
print(c,daimei)
print(c,"「",daimei,"」")
▼実行結果
宮沢賢治 銀河鉄道の夜
宮沢賢治 「 銀河鉄道の夜 」
- 定義されていない変数を使おうとすると、エラーになる。
- ここで、最後の「print(c,"「",daimei,"」")」の「c」を「d」に書き換えてみると、最後の行でエラーが発生する。
▼書き直したプログラム
c="宮沢賢治"
daimei="銀河鉄道の夜"
print(c,daimei)
print(d,"「",daimei,"」")
▼実行結果
NameError Traceback (most recent call last)
~\***\***\***/***/***.py in
4 daimei="銀河鉄道の夜"
5 print(c,daimei)
----> 6 print(d,"「",daimei,"」")
NameError: name 'd' is not defined
- ここで、変数「c」の定義の下に変数「d」の定義として「d=c」を追加して、以下のようにしてみると、正常に動作する。
▼書き直したプログラム
c="宮沢賢治"
d=c
daimei="銀河鉄道の夜"
print(c,daimei)
print(d,"「",daimei,"」")
▼実行結果
宮沢賢治 銀河鉄道の夜
宮沢賢治 「 銀河鉄道の夜 」
- このサンプルの最後の行では、題名の前後にかぎかっこを付けているが、半角のスペースも表示されてしまっている。
- 題名の前後のスペースを削除するためには、コンマをプラスに変えて、文字を連結させればよい。
▼書き直したプログラム
c="宮沢賢治"
d=c
daimei="銀河鉄道の夜"
print(c,daimei)
print(d,"「"+daimei+"」")
▼実行結果
宮沢賢治 銀河鉄道の夜
宮沢賢治 「銀河鉄道の夜」
3. ファイルの読み込み
- 青空文庫で公開されている、宮沢賢治「どんぐりと山猫」のデータをもとにして、ファイルから1行ずつデータを読み込み、表示させてみる。
サンプルファイル「py203.ipynb」
# -*- coding: utf-8 -*-
f = open("donguri.txt", encoding="utf-8")
print("読み込み開始")
for i in f:
print(i)
f.close()
print("読み込み終了")
- このプログラムでは、以下のように処理が実行されている。
- f は、 donguri.txt という名前のファイルを開いている。 (文字コードは utf-8)
- その下の「for」では、 f のデータを1行ずつ読み込み、 i に受け渡している。
- その下の字下げした print(i) では、 i を表示させている。
- この print(i) は、f のファイルから読み込むデータが無くなるまで繰り返される。
- 読み込むデータが無くなると、繰り返しがストップする。
- 最後に、f.close() でファイルを閉じている。
- ここで、プログラムを実行した結果を見ると、データ1行が表示された後に、必ず空白の行が1行ある。
- これは、もとのデータそのものに存在する改行のデータと、プログラムが自動的に付け加えた改行のデータが重なってしまったことが原因である。
- プログラムを修正すれば、余分な改行を削除することも可能である。
- 削除する方法はいくつかあるが、ここでは、もとのデータそのものに存在する改行を削除してみる。
- そのためには、 print(i) を以下のように書き換えればよい。
print(i[:-1])
- ここで、i[:-1] というのは、変数 i のデータの末尾の1文字を削除したことを表す。
4. ファイルの書き込み
- ファイルの読み込みに使ったプログラムをもとにして、読み込んだデータを加工して、別のファイルに書き込むプログラムを作成してみる。
- 今度は、開くファイルが2つになるため、片方を fdon もう片方を fyam としてみる。
- また、書き込む際に、各行の先頭に、繰り返しの回数を追加してみる。
サンプルファイル「py204.ipynb」
# -*- coding: utf-8 -*-
kaisu = 0
fdon = open("donguri.txt", encoding="utf-8")
fyam = open("yamaneko.txt", "w", encoding="utf-8")
print("書き込み開始")
for i in fdon:
kaisu +=1
print(kaisu, i[:-1], file=fyam)
fdon.close()
fyam.close()
print("書き込み終了")
- このプログラムでは、以下のように処理が実行されている。
- kaisu は繰り返しの回数を記録するための変数であり、プログラムの先頭で数値「0」を設定している。
- fdon は、 donguri.txt という名前のファイルを開いている。 (文字コードは utf-8)
- fyam は、 yamaneko.txt というファイルを、書き込みモード "w" で開いている。 (文字コードは utf-8)
- この "w" モードとは、「書き込み用に開き、まずファイルを切り詰める」というモードである。
- このモードでは、もしファイルが存在しなければ新規にファイルが作成され、逆にファイルがすでに存在した場合はファイルの内容がいったんクリアされる。
- 「for」では、 fdon のデータを1行ずつ読み込み、 i に受け渡している。
- その下の字下げした kaisu +=1 は、 kaisu に「プラス1」の値を設定している。
- この kaisu +=1 は、 kaisu = kaisu + 1 と同じ結果になるものだが、この表現の方が見やすいので、Python ではよく使われる。
- その下の字下げした print(kaisu, i[:-1], file=fyam) では、変数 kaisu と、変数 i[:-1] とを、ファイル fyam に書き込んでいる。
- 字下げして入力された kaisu +=1 と print(kaisu, i[:-1], file=fyam) は、 fdon のファイルから読み込むデータが無くなるまで繰り返される。
- 読み込むデーが無くなると、繰り返しがストップする。
- 最後に、fdon.close() と fyam.close() でファイルを閉じている。
- このプログラムが正常に実行されると、デスクトップの「教材」フォルダの中に、新規ファイル「yamaneko.txt」が作成されている。
- ファイルを開くと、以下のようなデータが入っていることが分かる。
1 どんぐりと山猫
2 宮沢賢治
3
4
5
6 おかしなはがきが、ある土曜日の夕がた、一郎のうちにきました。
7
8 かねた一郎さま 九月十九日
9 あなたは、ごきげんよろしいほで、けっこです。
10 あした、めんどなさいばんしますから、おいで
11 んなさい。とびどぐもたないでくなさい。
12 山ねこ 拝
5. HTML とは?
- Web ページを記述するための言語で、マークアップ言語と呼ばれるものの一種である。
- 本来のデータの前後に「タグ」と呼ばれるデータを置くことによって、そのデータの意味を記述することができる。
- あるページと別のページを「リンク」で結ぶ機能もある。
- 以下は、IT用語辞典 e-Words から抜粋。
HTML 【HyperText Markup Language】
HTMLとは、Webページを記述するためのマークアップ言語。文書の論理構造や表示の仕方などを記述することができる。W3Cによって標準化が行われており、大半のWebブラウザは標準でHTML文書の解釈・表示が行える。
HTMLでは、文書の一部を“<”と“>”で挟まれた「タグ」と呼ばれる特別な文字列で囲うことにより、文章の構造や修飾についての情報を文書に埋め込んで記述することができる。
- HTML の基本的な解説として、京都大学文学部が公開している以下のページが参考になる。
- [参考リンク]: 京都大学 - 情報基礎演習【文学部】
- 特に、以下の回が参考になる。
- [参考リンク]: 第12回「ウェブサイトの作成(1):HTML 編」 - HTML の基礎
- [参考リンク]: 第13回「ウェブサイトの作成(2):CSS 編」 - HTMLの復習
6. HTML ファイルの基本的な構成
- HTML ファイルは、大きく分けて以下の4つの要素からなる。
- DOCTYPE 宣言
- ファイルの先頭に置かれ、 <!DOCTYPE> で始まる部分。
- このファイルが HTML ファイルであることを宣言する。
- HTML 要素
- タグ <html> と </html> で囲まれた部分。
- 「DOCTYPE 宣言」以外のすべてが該当し、以下の「HEAD 要素」と「BODY 要素」を含む。
- HEAD 要素
- タグ <head> と </head> で囲まれた部分。
- ファイルのタイトルや、ファイルに関する情報などが記述されている。
- BODY 要素
- タグ <body> と </body> で囲まれた部分。
- ここに入力されたデータが、Web ページとして表示される。
7. HEAD 要素のサンプル
- 「HEAD 要素」の例として、この部分に「文字コード」と「タイトル」を指定したサンプルを示す。
サンプルファイル「py205.ipynb」
- 以下のように入力されている。
# -*- coding: utf-8 -*-
# このサンプルは、単純に、入力値をそのままHTMLファイルに書き込む。
# 以下の、「print("""」から、カッコを閉じるまでのデータが書き込まれる。
fhtml = open("sf205.html", "w", encoding="utf-8")
print("書き込み開始")
print("""
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>HEAD 要素のサンプル</title>
</head>
<body>
<p>このファイルは、HEAD 要素のサンプルです。</p>
<p>文字コードとして「charset=utf-8」が入力されています。</p>
<p>タイトルとして「HEAD 要素のサンプル」が入力されています。</p>
</body>
</html>
""", file=fhtml)
fhtml.close()
print("書き込み終了")
- 実行すると「教材」フォルダの中に「sf205.html」というファイルが作成される。
- このファイルは HTML 形式のファイルであり、Web ブラウザで開くことができる。
- このファイルを開くためには、デスクトップの「教材」フォルダを開き、その中のファイルを開く必要がある。
- 「sf205.html」を開くと、Web ブラウザで以下のように表示される。
- ここで、Web ブラウザの右クリックメニューから、「ページのソースを表示」を実行してみる。
- ページのソースは、以下のように表示される。
- その内容は、当然、Python のプログラムの、 print の部分に入力されていたものと一致する。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>HEAD 要素のサンプル</title>
</head>
<body>
<p>このファイルは、HEAD 要素のサンプルです。</p>
<p>文字コードとして「charset=utf-8」が入力されています。</p>
<p>タイトルとして「HEAD 要素のサンプル」が入力されています。</p>
</body>
</html>
- 上記の例で入力されている HEAD 要素は、以下の2種類である。
- 「meta」で始まる部分
- このファイルの内容が「text/html」という形式であり、文字コードが「utf-8」であることが入力されている。
- この部分は、ブラウザでは表示されないが、そのページを正常に表示するために重要な役割を果たしている。
- 「title」で始まる部分
- このファイルのタイトルが「HEAD 要素のサンプル」であることが入力されている。
- この部分は、Web ブラウザでは、ページの外の「タブ」や「タイトルバー」などで表示される。
(表示される場所は、Web ブラウザの種類によって異なる。)
8. BODY 要素のサンプル
- 「BODY 要素」には、「ブロックレベル要素」と「インライン要素」と呼ばれるものがある。
- それぞれの要素で、よく使われるものには、以下のようなものがある。
- 出典: 第12回「ウェブサイトの作成(1):HTML 編」 - HTML の基礎
- ブロックレベル要素
- 【見出し】(h1~h6)
- 【パラグラフ】(p)
- 【強制改行】(br /)と【横罫線】(hr /):終了タグ不要
- 【引用文】(blockquote)
- 【箇条書きリストと番号リスト】(ul, ol, li)
- 【定義型リスト】(dl, dt, dd)
- 【表】(table, tr, th, td)
- 【コメントアウト】(<!-- ~ >)
- インライン要素
- 【リンク】(a)
- 【画像】(img):終了タグ不要
- 【強調】(em, strong)
サンプルファイル「py206.ipynb」
- このサンプルファイルでは「ブロックレベル要素」に区分されるものを試してみる。
- ファイルには、以下のように入力されている。
# -*- coding: utf-8 -*-
# このサンプルは、単純に、入力値をそのままHTMLファイルに書き込む。
# 以下の、「print("""」から、カッコを閉じるまでのデータが書き込まれる。
fhtml = open("sf206.html", "w", encoding="utf-8")
print("書き込み開始")
print("""
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>BODY 要素のサンプル</title>
</head>
<body>
<h1>この部分は、「見出し1」のサンプルです。</h1>
<h2>この部分は、「見出し2」のサンプルです。</h2>
<h3>この部分は、「見出し3」のサンプルです。</h3>
<p>この部分は、「パラグラフ」と「強制改行」<br>
のサンプルです。</p>
<hr>
<p>この上は、「横罫線」のサンプルです。</p>
<blockquote>この部分は、「引用文」のサンプルです。</blockquote>
<ul>
<li>この部分は、「個条書きリスト」のサンプルです。
</ul>
<ol>
<li>この部分は、「番号リスト」のサンプルです。
</ol>
<dl>
<dt>この部分は、「定義型リスト」の見出し項目のサンプルです。
<dd>この部分は、「定義型リスト」の内容項目のサンプルです。
</dl>
<table border="1">
<tr>
<th>この部分は、「表」の見出し項目のサンプルです。</th>
</tr>
<tr>
<td>この部分は、「表」の内容項目のサンプルです。</td>
</tr>
</table>
</body>
</html>
""", file=fhtml)
fhtml.close()
print("書き込み終了")
- 実行すると、「sf206.html」というファイルが作成される。
- 「sf206.html」を開くと、Web ブラウザで以下のように表示される。
- 上記の例で使われている「ブロックレベル要素」は、以下の9種類である。
- 見出し
- タグ <h1></h1>, <h2></h2>, <h3></h3> で囲まれた部分。
- 通常より文字が大きく強調される。数字が小さいほどサイズは大きく表示される。
- パラグラフ
- タグ <p></p> で囲まれた部分。
- 全体が1つの段落として、まとまって表示される。
- パラグラフの前後は改行され、1行程度の間隔をおいて表示される。
- 強制改行
- タグ <br>。
- このタグは単独で機能し、タグの前後が改行されて表示される。
- 横罫線
- タグ <hr>。
- このタグは単独で機能し、タグの位置に横罫線が表示される。
- 引用文
- タグ <blockquote></blockquote> で囲まれた部分。
- 通常より字下げして表示される。
- 個条書きリスト
- タグ <ul></ul> で囲まれた部分。
- リストの個々のデータの前には、タグ <li> を置く。
- 通常より字下げして、先頭に「・」などの記号を付けて表示される。
- 番号リスト
- タグ <ol></ol> で囲まれた部分。
- リストの個々のデータの前には、タグ <li> を置く。
- 通常より字下げして、先頭に「1.」などの数字をつけて表示される。
- 定義型リスト
- タグ <dl></dl> で囲まれた部分。
- リストの見出し項目のデータの前には、タグ <dt> を置く。
- リストの内容項目のデータの前には、タグ <dd> を置く。
- 内容項目は、見出し項目より字下げして表示される。
- 表
- タグ <table></table> で囲まれた部分。
- 1行ごとに、タグ <tr></tr> で囲む。これが、行の区切りになる。
- 表の見出し項目のデータは、タグ <th></th> で囲む。
- 表の内容項目のデータは、タグ <td></td> で囲む。
9. リンクと画像のサンプル
- ここでは、「BODY 要素」のうちの「インライン要素」に区分される、「リンク」と「画像」のサンプルを試してみる。
- 画像ファイル出典: 国立国会図書館オンライン ヘルプページ
サンプルファイル「py207.ipynb」
- 以下のように入力されている。
# -*- coding: utf-8 -*-
# このサンプルは、単純に、入力値をそのままHTMLファイルに書き込む。
# 以下の、「print("""」から、カッコを閉じるまでのデータが書き込まれる。
fhtml = open("sf207.html", "w", encoding="utf-8")
print("書き込み開始")
print("""
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>リンクと画像のサンプル</title>
</head>
<body>
<p>この下は、同じフォルダにあるファイルへのリンクのサンプルです。</p>
<p><a href="donguri.txt" target="_blank">donguri.txt へのリンク</a></p>
<p>この下は、URL を使ったリンクのサンプルです。</p>
<p><a href="https://ndlonline.ndl.go.jp/" target="_blank">国立国会図書館オンラインへのリンク</a></p>
<p>この下は、画像ファイルを表示させたサンプルです。</p>
<p><img src="banner_ndlonline.png"></p>
<p>この下は、URL を使ったリンクで、クリックする部分に画像ファイルを用いたサンプルです。</p>
<p><a href="https://ndlonline.ndl.go.jp/" target="_blank"><img src="banner_ndlonline.png"></a></p>
</body>
</html>
""", file=fhtml)
fhtml.close()
print("書き込み終了")
- 実行すると、「sf207.html」というファイルが作成される。
- 「sf207.html」を開くと、Web ブラウザで以下のように表示される。
- ここではリンクを作成するためのタグが、以下のように使われている。
- リンク部分は、タグ <a href=" [文字列] "> と </a> で囲む。
- 「 [文字列] 」には、リンク先のファイル名やURLを入力する。
- 上記の例で、タグ <a href=" [文字列] "> に含まれている「 target="_blank"」は、リンク先を「別画面」で開くために入力したものである。
- 「 target="_blank"」がない場合は、その画面のままでリンク先へ移動する。
- タグ <a href=" [文字列] "> と </a> の間に入力された「donguri.txt へのリンク」や「国立国会図書館オンラインへのリンク」は、クリックする部分としてブラウザで表示される。
- この「クリックする部分」に画像ファイルを指定すれば、画像をクリックしてリンク先へ移動することができるようになる。
- 画像ファイルを表示するタグは、以下のように使われている。
- タグ <img src=" [文字列] "> を使う。
- 「 [文字列] 」には、表示する画像ファイルのファイル名やURLを入力する。
- このタグは単独で機能する。
- 上記の例では、「 [文字列] 」として「banner_ndlonline.png」を入力している。
- この画像ファイルは、国立国会図書館オンラインのヘルプページからダウンロードしたファイルである。
- 上記の最後の例の「クリックする部分」では、文字の代わりに画像ファイルが指定されていることに注意。
クイズ
今回のサンプルファイルについて
- 以下は、今回の授業で配付するサンプルファイル。
- ただし、授業の際は、これらのファイルを先生用パソコンからファイル転送するので、以下のリンクは使用しない。
- 欠席した場合や、授業終了後の復習などの場合に、適当な場所へダウンロードして使用すること。