1日目

Python とは

Python について

Python はコンパイルの必要がないスクリプト言語です。グーグルや Yahoo など大手 IT メーカーでも使用されています。ソフトの GUI 周りの実装やカスタマイズ言語に使われています。最近では機械学習や深層学習などに利用されており、AI や IoT に注目が集まっている中でそれらを構築する言語としても注目されています。Python は無償で配布されており、メモ帳などのテキストエディタがあればだれでも入手後にすぐコーディングができます。Python には数学、科学技術計算、グラフプロットなど非常に多くのライブラリが配布されており、これらを利用することで高速に実装ができます。

Python が使用されているソフト

Python が使用されているソフトには次のものがあります。

  • Blender:3DCG、アニメーション、ゲーム制作用環境
  • Dropbox:クラウド型ファイル保存サービス
  • Abaqus:有限要素法による解析を行うソフトウェア
  • ParaView:オープンソースの汎用可視化アプリケーション
  • Vim:テキストエディタ
  • Google:Google Groups, Gmail, Goolgle Maps のバックエンドで各種のタスクを遂行するために使用している
  • Youtube:「メンテナンスが容易な機能を最小の開発者で迅速に作る」ためにPython を使用している

Python の特徴

Python の特徴を良い点と良くない点で整理しました。良くない点といっても対策はありますので、それらも併記しています。

  • 良い点
    • コードの文法がシンプル(誰が書いても同じようなコードになります。)
    • 変数の動的型付け(文脈から変数の方を割り当ててくれます。)
    • メモリ管理の必要がない(C 言語のようなポインタはないです。)
    • OS に限りなく依存しない(Windows、Linux、Mac)
    • オブジェクト指向言語
    • グルー言語(他の言語と相互にライブラリ呼び出しができます。)
    • ライブラリが多い(公式サードパーティ問わず大量にあります)
  • 良くない点
    • (なにも考えずにコードを書くと) コンパイラ型言語 (C++、VB など) に比べて動作が遅い。 (Cythonという Python とC言語のいいとこ取りの言語が出てきたりしています)
    • 基本的には実行ファイル化できないため、インタプリタを琿境として用意する必要がある。 (サードパーティ製のpy2exe を使用すれば可能だが完全対応ではない)
    • ◦動的型付けであるため、あいまいな記述をした時にエラーやバグの原因となる。(例:整数型と浮動小数点型の計算など。Python3で解消)

Python の使われ方

言語として文法が簡単であること、インタプリタを使用した高速なデバッグが可能であることを活かし、ちょっとした処理の内製コードを自作する時には非常に便利です。また、Pythonは他の言語とのつなぎを得意とすることから、メイン部分以外の機能の実装に使われていることが多いです。(高速な処理が必要な部分はC言語やFortranで書いておき、ファイル操作やGUIなどをPythonで実装したりします)。もちろん、Python単体でもプログラムを書くことはできますので、習得することで複数言語の組合せや、コードの高速な実装ができるようになります。

Python の実行環境

Pythonにはいくつかの実行環境の構築の仕方があります。

実行環境の例
実行環境の例

Pythonはインタプリタのあるフォルダにパスを通すorフルパスで実行することで、実行するマシンにインタプリタをインストールしていなくてもコードを実行することができます。他のブログラムにPythonをフォルダごとコピーして用意しておけばPythonをプログラム内に組み込むことができます。

Python の基礎

使用する環境

本書ではPythonの環境としてAnacondaを使用します。AnacondaはPythonの パッケージインストーラで、Pythonの開発でよく使用するライブラリを、プリインス トールした状態ですぐに使用することができます。ライセンスはMITライセンスのた め商用利用も可能です。

Python の起動

Pythonの起動はコマンドプロンプトからできます。コマンドプロンプトで次のコマンドを実行すると、Pythonの対話型インターフェースが起動します。

C:¥ > python

または、スタートメニューのプログラムリストからAnacondaPromptから起動できます。

スタートメニューからの実行
スタートメニューからの実行

ファイルを取り扱う場合など、指定のフォルダでPythonを起動したいときは、アドレスパーに「python」と打ち込めば、そのフォルダでPythonを起動できます(cmdと打ち込めばコマンドプロンプトも立ち上げれます)。

アドレスバーでの実行
アドレスバーでの実行

print 関数による表示

print関数は渡した引数を画面に表示する関数です。変数を引数として渡した場合は、変数の中身を表示します。

>>> a=1 #aに1を代入
>>> print(a) # print関数の引数にaを渡す
1

文字列は文字を’(シングルクォーテーション)で囲むと定義できます。print関数に直接渡す場合は、引数としてシングルクォーテーションで囲った状態で渡します。

>>> print(’Hello’)
Hello

>>> print(Hello) # "で囲っていないので変数名として見られエラーになる
Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
NameError: name ’Hello’ is not defined # Helloという名前の変数がない

ここで、「#」はコメント記号です。#の後に続く行内の記述はコメントとして取り扱われ、Pythonのインタプリタでは処理されません。

変数の型について

Pythonでよく使う重要な変数型を紹介します。整数型(int)、浮動小数点(float)、文字列型(str)、Bool型(bool)、リスト型(list)です。Pythonは動的型付けですので、コードの冒頭などで型の宣言は必要ありません。

変数型
概要
整数型
整数で表示される数値型
浮動小数点
浮動小数点 小数を含む形で表示される数値型
文字列型
文字列のテキストデータを扱う
bool型
True と False のどちらかを値として持つ
リスト
他言語における配列のようなもの

四則演算のやり方

四則演算は他のプログラミング言語と大差はあリません。足し算は「+(プラス)」、引き算は「-(マイナス)」、かけ算は「*(アスタリスク)」、割り算は「/(スラッシュ)」を使います。

>>> a = 1.0
>>> b = 2.0
>>> a + b
3.0
>>> a - b
-1.0
>>> a * b
2.0
>>> a / b
0.5
>>>

その他の演算

他にもべき乗は「**(アスタリスク2個)」、剰余(余りを求める)は「%(パーセント)」で演算できます。

>>> a = 2.0
>>> b = 3.0
>>> a ** b
8.0
>>> b % a
1.0

四則演算の注意点

Python3では浮動小数点型と整数型の演算でも浮動小数点型になるように変更されています。Python2のように整数型の結果が得たいときには「//」(スラッシュニつ)を使用します。

>>> a = 1
>>> b = 2
>>> a / b
0.5
>>> c = 2.0
>>> a / c
0.5
>>> a // b
0

文字列の操作

文字列を連結したい場合は「+」を使用します。

>>> a = 'Hello'
>>> b = 'World'
>>> a + b
'HelloWorld'

文字列の一部を取リ出したいときは、「[]」を使います。[]の中身は文字の位置を指定し、0から始まる番号で「~以上:(コロン)~未満」で入力します。

>>> a = 'HelloWorld'
>>> print(a[0:5]) # aの0以上5未満の文字を抜き出す
Hello

また、何文字目以降すベて、という形を指定する場合は、:(コロン)の後に数字を指定しない記述をします。

>>> a = 'HelloWorld'
>>> print(a[5:])
World

末尾から数えて何文字目から、という指定の場合は「-(マイナス)」を付けた数字で指定します。

>>> a = ’HelloWorld’
>>> print(a[-5:])
World

findメソッド

文字列の中から、指定の文字列が存在する位置を調べたいときはfindメソッドを使用します。メソッドは特定のオブジェクト(クラス)に紐づけられた関数のことです。「<オブジェクト>.(ピリオド)<メソッドの名称>()」で使用できます。findは文字列クラス用の関数(メソッド)です。メソッドはprint関数の様に単独では使用できません。

>>> a = 'Hello World !!!'
>>> a.find('World')
6
>>> a.find(' !')
11
>>> a[6:11]
'World'

型の確認と変換

Pythonは動的型付けのため、それぞれの変数がどの型なのかを判断できなくなる時があります。その時にはtype関数を使用して型の確認ができます。

>>> a = 'ABC'
>>> type(a)
<class 'str'>

型の種類はいくつかあリますが、整数型は「int」、浮動小数点型は「float」、文字列は「str」型が表示されます。

>>> a = 123
>>> type(a)
<class 'int'>
>>> b = 0.001
>>> type(b)
<class 'float'>

処理の都合上、型を一意に定めたいときはint関数、float関数、str関数を使います。

>>> a = '100' # 文字列の100
>>> type(a)
<class 'str'>
>>> b = int(a) # aを整数型にしてbに格納する
>>> print(b)
100
>>> type(b)
<class 'int'>
>>> c = float(a) # aを浮動小数点型にしてcに格納する
>>> print(c)
100.0
>>> type(c)
<class 'float'>

データの格納

リストの使い方

Pythonではデータをまとめて格納するためにリストを使います。リストは[]を用いて定義することができます。リストに入っているデータにはリストの後ろに[]と0から始まる番号を用いてアクセスすることができます。

>>> a = [1, 2, 3, 4]
>>> print(a[0]) # 0番目のデータを表示
1
>>> a[2] = 100 # 2番目のデータに100を代入
>>> print(a)
[1, 2, 100, 4]
>>> a[3] = 'Hello' # 3番目のデータに100を代入
>>> print(a)
[1, 2, 100, 'Hello'] # リストの中は文字列と数字の混在が可能

リストの操作

リストへの要素の追加はappendメソッドを使うことでできます。

>>> a = [4, 2, 100, 10]
>>> a.append(1000)
>>> print(a)
[4, 2, 100, 10, 1000]

リストの中の数値データの最大値、最小値を求めるのにはmax関数とmin関数を使います。

>>> a = [4, 2, 100, 10]
>>> a.append(1000)
>>> print(a)
[4, 2, 100, 10, 1000]
>>> max(a)
1000
>>> min(a)
2

リストのソート

リストの中身をソートするにはsortメソッドを使います。逆順のソートにはreverseメソッドを使います。

>>> a = [4, 2, 100, 10, 1000]
>>> a.sort()
>>> print(a)
[2, 4, 10, 100, 1000]
>>> a.reverse()
>>> print(a)
[1000, 100, 10, 4, 2]

メソッドには元のデータを上書きするような形で働くものがあります。前述の例ではメソッドを使ったとにリストの中身自体が変化しています。プログラミングの際はこれらの破壊的な変更が発生するかどうか確認する必要があります。

リストの入れ子

Pythonには配列というものが基本的には存在しません。そのため、多次元配列のようなものを実現するためにはリストを入れ子にする必要があります。リストを入れ子にするには、リストの中にリストを定義することで実現できます。

>>> a = [[10, 20], [100, 200]] #入れ子のリストを定義
>>> print(a)
[[10, 20], [100, 200]]
>>> print(a[1][0]) #二つ目の入れ子のリストから1番目の要素を取得
100
>>> a.append([1000,2000]) #リストにリストをappendすることでも入れ子が可能
>>> print(a)
[[10, 20], [100, 200], [1000, 2000]]
>>> a[0][0] = [1,2] #入れ子のリストの中にさらにリストを入れることも可能
>>> print(a)
[[[1, 2], 20], [100, 200], [1000, 2000]]

リストに含まれている要素を調べる

リストの中にある要素を調べるにはindexメソッドを使用します。indexメソッドを使用することで指定したデータが、リストの何番目に入っているかを調べることができます。

>>> a = [1,2,3,4]
>>> a.index(3) # aの中で0番目から調べて最初の3が現れる位置を返す
2

ディクショナリ

Pythonにはキーと呼ばれる文字列と数値を紐付けてデータを格納するディクショナリというものがあります。中括弧の中に、「キー:データ」の形で定義します。ディクショナリの中にはキーを指定してアクセスすることができます。注意する点としてはデータのアクセス、代入には{}ではなく[]を使うことです。

>>> a = {'First':1, 'Second':2}
>>> print(a)
{'First': 1, 'Second': 2}
>>> print(a['Second'])
2
>>> a['Third'] = 3
>>> print(a)
{'First': 1, 'Second': 2, 'Third': 3}

タプルの使い方

Pythonではデータをまとめて格納するために、「タプル」も使えます。タプルは()を用いて定義することができます。タプルに入っているデータにはリストの後ろに[]と0から始まる番号を用いてアクセスすることができます。ただし、タプルのデータはリストとは異なり、代入ができません。

>>> a = (1,2,3,4)
>>> print(a[0])
1
>>> a[2] = 100
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: ’tuple’ object does not support item assignment

制御文

While文

ある条件式が成り立つ間、処理を繰り返すループを作るにはwhile文を使います。while文は次のように記述します。

while 条件式:
    処理内容

条件式の最後にはコロン「:」を付け、処理内容の記述の際にはwhile文よりもインデントを付けて記入する必要があリます。インデントはif文やfor文でも使用します。また、制御文内の処理はインデントの数をそろえる必要があります。条件式には「==(等号)」、「!=(不等号)」、「<(より小さい)」、「>(より大きい)」、「<=(以上)」、「>=(以下)」が使えます。

>>> while i < 3: #最後はコロン
... print(i) #行頭に1字空白が入っている
... i = i + 1 #入力が終わったら空のままENTERを押す
...
0
1
2

for文

for文は他の言語のものとは少し意味が異なります。Pythonのfor文は与えられたリストに含まれているデータの数だけ処理を実施します。何番から何番までの回数繰り返すとういう記述ではありません。

>>> a = [1,2,3]
>>> for i in a: # aのリストの中身を一つづつiに格納する
...     print(i)
...
1
2
3

if文

if文は他の言語とほぼ同じように使えます。条件を複数設定する場合は「elif」、条件に合致しない場合の処理は「else」で記述できます。どの条件文にも「:(コロン)」を付ける必要があります。

>>> a = 'Hello'
>>> if a == 'Hello': # aがHelloだったら
...     print('YES')
... elif a == 'World': # aがWorldだったら
...     print('NO')
... else: #どれにも当てはまらない場合
...     print(a)
...
YES

論理演算子は次のように記述できる。

  • A かつ B:  A and B
  • A または B:  A or B
  • A でなければ:  not A
>>> a = 50
>>> if a > 10 and a < 100: # aが10よリ大きく、かつ100よリ小さかったら
...     print('YES')
...
YES
>>> if a % 3 == 0 or a > 0: # aが3で割り切れる、または、0よリ大きかったら
...     print('YES')
...
YES
>>> if not a < 0: # aが0よリ小さくなければ
...     print('YES')
...
YES

ファイル入出力

ファイルを開く、閉じる

ファイル操作を行うには、まずファイルを開く必要があります。ファイルを開くにはopen関数を使います。ファイルの開き方にはいくつかの種類があり、データを新規に書き込むときは「w」を、データを読み込むときは「r」、データを追記する時は「a」を指定します。

>>> a = open('sample.txt', 'w') # データを書き込むとき
>>> b = open('sample.txt', 'r') # データを読み込むとき
>>> c = open('sample.txt', 'a') # データを追記するとき

ファイル操作が終わった後は、ファイルを閉じる必要があります。ファイルを閉じることでファイル操作が完了します。ファイルを閉じるにはcloseメソッドを使います。

>>> a.close()

ファイルから読み込む

ファイルからの読み込みにもいくつか種類があります。readメソッドは括弧内で指定する数字の分だけ文字列を読み込みます。数値の指定がないときは全てを読み込みます。readlineメソッドはファイルから1行を読み込みます。括弧の中には1行の内、何文字を読み込むかを指定できます(括弧内の指定がなければ1行すベて読込)。readlinesメソッドは複数行を読み込みます。括弧の中は読み込む行のサイズを指定できます。また、逐次ファイルを読み込みながら作業をしたい場合は、for文にopenしたフアイルを引き渡すことで1行ずつ狭み取る処理を実施することができます。読み込みの例として次のようなファイルを用意して、その中身を1行づつ読み取りたいと思います。

1行目 Hello
2行目 World
3行目 !
sample.txt の中身

コード例を次に示します。

>>> a = open(’sample.txt’, ’r’)
>>> for i in a:
... print(i)
...
Hello
World
!

ファイルに書き込む

ファイルへの書き込みはwriteメソッドを使います。括弧の中には書き込む文字列を指定します。括弧の中は変数でも大丈夫です。書き込む文字列を改行したい場合は文字列の末尾に「\n」のエスケープ文字を付けることで実現できます。

>>> oid = open('sample.txt', 'w')
>>> oid.write('Hello\n')
6
>>> oid.write('World\n')
6
>>> oid.write('!')
1
>>> oid.close()

format文で書き込む

書き込み際にあるフォーマットの一部だけを変数として、文字列を書き込みたいときがあります。その場合はformat文を使用します。format文は次の文法で使用します。

'{引数の番号}'.format(引数1,引数2,・・・)

format文を使用することで、数値データの桁数や表示形式(指数表示など)の処理ができるようになります。

>>> oid = open('sample2.txt', 'w')
>>> a = 0.001
>>> b = 100
>>> buf = 'そのまま表示は{0}と{1}です。\n'.format(a, b)
>>> oid.write(buf)
19
>>> buf2 = '指数表示は{0:e}と{1:.1e}です。\n'.format(a, b)
>>> oid.write(buf2)
28
>>> oid.close()
そのまま表示は0.001と100です。
指数表示は1.000000e-03と1.0e+02です。
sample2.txt に書き込まれた内容

with文

open関数とcloseメソッドは一対で使用しますが、closeメソッドの書き忘れによる予期せぬバグの発生や、コードの冗長性の増加など不都合な点があります。Python2.6以降ではwith文を用いることで簡潔にファイルオブジェクトの処理を記述することができます。with文でファイルオブジェクトを開くときは、次の様にして記述します。

>>> with open('sample.txt', 'r') as fid:
...     for i in fid:
...         print(i)
...
Hello
World
!

例題:ファイル内容の取得と任意形式の出力

例題としてあるファイルの中身から、欲しいデータを抜き出すコードを作ってみます。サンプルのファイルを次のコードで作成します。「result~」の行が欲しい行だと仮定します。

>>> with open('example1.txt', 'w') as oid:
...     for i in range(100):
...         oid.write('dammy\n')
...         oid.write('result ' + str(i) + ' ' + str(i+1) + " \n")
...         oid.write('dammy2\n')
...         oid.write('dammy3\n')
...

次のような内容のデータができます。

dammy
result 0 1
dammy2
dammy3
dammy
result 1 2
dammy2
dammy3
dammy
result 2 3
dammy2
dammy3
 ・
 ・
 ・
example1.txt の中身

今回はresultと書いてある行の後ろの数値を読み取り、カンマ区切りで出力してみたいと思います。まずはファイルを開き、読み込んでいきます。読み込みながら、行の中身を確認して、resultと書いてある行だけ読み込みます。読み込みの際に空白で、iの文字列を区切り、リストに格納します。文字列を区切るのにはsplitメソッドを使用します。空白区切りの場合は「~.split()」を使用します。その他の文字で区切る場合は()の中に区切り文字を入力します(カンマ区切りの場合は「~split(',')」)。splitメソッドで区切ったものはリストとなり、すべて文字列になります。

>>> with open('example1.txt', 'r') as fid:
...     temp = [ ] # 結果を格納する入れものを作ります。
...     for i in fid:
...         buf = i.split()
...         if buf[0] == 'result':
...             temp.append(buf[1:3])
...         else:
...             pass # 処理をしないときはpassを入力
...

次の例ではデータがa、b、cの3つですが、aとbの間にスペースが2つあります。スペースをsplitメソッドできちんと指定した場合はリストを見ると4つのデータが入ってしまっています。

>>> 'a b c'.split(' ')
['a', '', 'b', 'c']

先ほどデータを格納したtempの中身は次のようになっています。

>>> temp
[[’0’, ’1’], [’1’, ’2’], [’2’, ’3’], [’3’, ’4’], [’4’, ’5’], [’5’, ’6’],›
› [’6’, ’7’], [’7’, ’8’], [’8’, ’9’], [’9’, ’10’], [’10’, ’11’], [’11’, ’›
›12’], [’12’, ’13’], [’13’, ’14’], [’14’, ’15’], [’15’, ’16’], [’16’, ’17›
›’], [’17’, ’18’], [’18’, ’19’], [’19’, ’20’], [’20’, ’21’], [’21’, ’22’]›
›, [’22’, ’23’], [’23’, ’24’], [’24’, ’25’], [’25’, ’26’], [’26’, ’27’], ›
›[’27’, ’28’], [’28’, ’29’], [’29’, ’30’], [’30’, ’31’], [’31’, ’32’], [’›
›32’, ’33’], [’33’, ’34’], [’34’, ’35’], [’35’, ’36’], [’36’, ’37’], [’37›
›’, ’38’], [’38’, ’39’], [’39’, ’40’], [’40’, ’41’], [’41’, ’42’], [’42’,›
› ’43’], [’43’, ’44’], [’44’, ’45’], [’45’, ’46’], [’46’, ’47’], [’47’, ’›
›48’], [’48’, ’49’], [’49’, ’50’], [’50’, ’51’], [’51’, ’52’], [’52’, ’53›
›’], [’53’, ’54’], [’54’, ’55’], [’55’, ’56’], [’56’, ’57’], [’57’, ’58’]›
›, [’58’, ’59’], [’59’, ’60’], [’60’, ’61’], [’61’, ’62’], [’62’, ’63’], ›
›[’63’, ’64’], [’64’, ’65’], [’65’, ’66’], [’66’, ’67’], [’67’, ’68’], [’›
›68’, ’69’], [’69’, ’70’], [’70’, ’71’], [’71’, ’72’], [’72’, ’73’], [’73›
›’, ’74’], [’74’, ’75’], [’75’, ’76’], [’76’, ’77’], [’77’, ’78’], [’78’,›
› ’79’], [’79’, ’80’], [’80’, ’81’], [’81’, ’82’], [’82’, ’83’], [’83’, ’›
›84’], [’84’, ’85’], [’85’, ’86’], [’86’, ’87’], [’87’, ’88’], [’88’, ’89›
›’], [’89’, ’90’], [’90’, ’91’], [’91’, ’92’], [’92’, ’93’], [’93’, ’94’]›
›, [’94’, ’95’], [’95’, ’96’], [’96’, ’97’], [’97’, ’98’], [’98’, ’99’], ›
›[’99’, ’100’]]

読み込んだデータをexample2.txtに出力します。読み込んだデータは入れ子のリストになっているので、まずリスト「temp」の長さをlen関数を使用して測定し、その大きさ分だけfor文を実行します。カンマ区切りの書き込みはformat文を使用します。一つ目の数?だけ、小数点第二までの指数表示として出力します(文字列で読み込んでいるので、float関数で変換が必要です)。

>>> with open(’exmaple2.txt’, ’w’) as oid:
...     for j in range(len(temp)):
...         oid.write(’{0:.2e},{1}\n’.format(float(temp[j][0]), temp[j][1]))
...

example2.txtの中身が次の様になっていたら完成です。

0.00e+00,1
1.00e+00,2
2.00e+00,3
3.00e+00,4
4.00e+00,5
5.00e+00,6
6.00e+00,7
7.00e+00,8
8.00e+00,9
9.00e+00,10
1.00e+01,11
 ・
 ・
 ・
example2.txt の中身

Python スクリプトファイルの作成

py ファイルについて

これまではPythonの実行を対話形式で行ってきました。ただ、打ち込む内容が長いと対話形式では限界があります。そこで、pythonのコードをスクリプトファイルというファイルに記述し、打ち込む手間を減らしたいと思います。pythonは実行するコードを「.py」という拡?子のテキストファイルに記述することで、何度でも実行可能なファイルにすることができます。

py ファイルのイメージ
py ファイルのイメージ

py ファイルの実行

pyファイルの実行はコマンドプロンプトを開いて、次のコマンドを打ち込んで実行します(「Sample.py」の部分は実行したいpyファイルの名前に置き換えてください)。

python Sample.py
コマンドプロンプトでの実行
コマンドプロンプトでの実行

例題のスクリプト化

それでは試しに先ほどの例題をスクリプト化してみます。ファイルを作成するスクリプトを「MakeDammy.py」、欲しいデータを抜き出すスクリプトは「DataOutput.py」とします。まずは「MakeDammy.py」を作るために、テキストファイルを作成します。

テキストファイルの作成
テキストファイルの作成

スクリプトの記述

スクリプトの中身を記述するために、メモ帳などで.pyファイルを開きます。

メモ帳でファイルを開く
メモ帳でファイルを開く

メモ帳で開いたら例題のダミーファイルを作成するコードを次のように記述します。スクリプトファイルは空白行を入れることができるので、読みやすいように適宜空白行を入れて可読性を向上させましょう。またコメントは「#」で入力できます。#を入力した行は、行内の#以降の文章がコメント文となり、読み飛ばされます。また、コード内で日本語を使用する場合「#coding:utf-8」と入力しておきます(Python2では必需品でした)。

MakeDammy の記述
MakeDammy の記述

スクリプトファイルの実行

実行はMakeDammy.pyファイルをダブルクリックします。(アイコンがPythonのアイコンになっているときのみ)。実行してsample.txtが作成されていることを確認します。

MakeDammy.py で作成した sample.txt
MakeDammy.py で作成した sample.txt

例題

同様にして例題の残りをスクリプト化しましよう。(sample2.txtが出力できれば成功です。)スクリプトファイルの名称は「DataOutput.py」とします。

sample2.txt
sample2.txt

スクリプトファイルの回答は次の通りです。

DataOutput.py
DataOutput.py

例外処理

例外処理の記述方法

スクリプトファイルを作成し、実行可能なコードを作成していくと、例外処理が必要になることがあります。例外処理はエラーが発生した際に適切な対応をスクリプトにさせるための記述方法になります。例外処理は次の様にして記述できます。

try:
    <処理を記述>
expect:
    <try以下の処理で発生したエラーを検出したときに実行する処理を記述する>

例題

試しに簡単な例外処理を記述します。先ほど作成した「DataOutput.py」に例外処理を追加します。

# coding:utf-8
try:
    fid = open('example3.txt', 'r')
except:
    eid = open('error.txt', 'w')
    eid.write('ファイルがありません')
    eid.close()

temp = []  # 結果を格納する入れものを作ります。

for i in fid:
    buf = i.split()
    if buf[0] == 'result':
        temp.append(buf[1:3])
    else:
        pass  # 処理をしないときはpassを入力

fid.close()

with open('exmaple2.txt', 'w') as oid:
    for j in range(len(temp)):
        oid.write('{0:.2e},{1}\n'.format(float(temp[j][0]), temp[j][1]))

example3.txtが存在しない状態で、書き換えたDataOutput.pyを実行します。example3.txtがないので、error.txtが出力され、内部にエラーメッセージが書き込まれます。

モジュールの利用

モジュールの使い方

Pythonはライブラリが豊富に存在しています。それらのライブラリはモジュールとして、Pythonに読み込むことで標準文法で使用できない機能を使用できるようになリます。Pythonでモジュールをインポートするときは「from~import~」文を使用します。インポートして初めてモジュールの機能を使用できるようになります。

from XXX import * # アスタリスクはモジュール内の全てを意味する
from YYY import AAA # YYYモジュール内のAAAだけをインポートする
from ZZZ import BBB as B # ZZZモジュール内のBBBをBという名前を割り当ててインポ
ートする
B('Helloworld') # Bという名前でBBBを使用できる。BBBの名前が長いときに使ったリす
る
ライブラリのインポート記法について