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の対話型インターフェースが起動します。
または、スタートメニューのプログラムリストからAnacondaPromptから起動できます。
ファイルを取り扱う場合など、指定のフォルダでPythonを起動したいときは、アドレスパーに「python」と打ち込めば、そのフォルダでPythonを起動できます(cmdと打ち込めばコマンドプロンプトも立ち上げれます)。
print 関数による表示
print関数は渡した引数を画面に表示する関数です。変数を引数として渡した場合は、変数の中身を表示します。
文字列は文字を’(シングルクォーテーション)で囲むと定義できます。print関数に直接渡す場合は、引数としてシングルクォーテーションで囲った状態で渡します。
ここで、「#」はコメント記号です。#の後に続く行内の記述はコメントとして取り扱われ、Pythonのインタプリタでは処理されません。
変数の型について
Pythonでよく使う重要な変数型を紹介します。整数型(int)、浮動小数点(float)、文字列型(str)、Bool型(bool)、リスト型(list)です。Pythonは動的型付けですので、コードの冒頭などで型の宣言は必要ありません。
変数型 | 概要 |
整数型 | 整数で表示される数値型 |
浮動小数点 | 浮動小数点 小数を含む形で表示される数値型 |
文字列型 | 文字列のテキストデータを扱う |
bool型 | True と False のどちらかを値として持つ |
リスト | 他言語における配列のようなもの |
四則演算のやり方
四則演算は他のプログラミング言語と大差はあリません。足し算は「+(プラス)」、引き算は「-(マイナス)」、かけ算は「*(アスタリスク)」、割り算は「/(スラッシュ)」を使います。
その他の演算
他にもべき乗は「**(アスタリスク2個)」、剰余(余りを求める)は「%(パーセント)」で演算できます。
四則演算の注意点
Python3では浮動小数点型と整数型の演算でも浮動小数点型になるように変更されています。Python2のように整数型の結果が得たいときには「//」(スラッシュニつ)を使用します。
文字列の操作
文字列を連結したい場合は「+」を使用します。
文字列の一部を取リ出したいときは、「[]」を使います。[]の中身は文字の位置を指定し、0から始まる番号で「~以上:(コロン)~未満」で入力します。
また、何文字目以降すベて、という形を指定する場合は、:(コロン)の後に数字を指定しない記述をします。
末尾から数えて何文字目から、という指定の場合は「-(マイナス)」を付けた数字で指定します。
findメソッド
文字列の中から、指定の文字列が存在する位置を調べたいときはfindメソッドを使用します。メソッドは特定のオブジェクト(クラス)に紐づけられた関数のことです。「<オブジェクト>.(ピリオド)<メソッドの名称>()」で使用できます。findは文字列クラス用の関数(メソッド)です。メソッドはprint関数の様に単独では使用できません。
型の確認と変換
Pythonは動的型付けのため、それぞれの変数がどの型なのかを判断できなくなる時があります。その時にはtype関数を使用して型の確認ができます。
型の種類はいくつかあリますが、整数型は「int」、浮動小数点型は「float」、文字列は「str」型が表示されます。
処理の都合上、型を一意に定めたいときはint関数、float関数、str関数を使います。
データの格納
リストの使い方
Pythonではデータをまとめて格納するためにリストを使います。リストは[]を用いて定義することができます。リストに入っているデータにはリストの後ろに[]と0から始まる番号を用いてアクセスすることができます。
リストの操作
リストへの要素の追加はappendメソッドを使うことでできます。
リストの中の数値データの最大値、最小値を求めるのにはmax関数とmin関数を使います。
リストのソート
リストの中身をソートするにはsortメソッドを使います。逆順のソートにはreverseメソッドを使います。
メソッドには元のデータを上書きするような形で働くものがあります。前述の例ではメソッドを使ったとにリストの中身自体が変化しています。プログラミングの際はこれらの破壊的な変更が発生するかどうか確認する必要があります。
リストの入れ子
Pythonには配列というものが基本的には存在しません。そのため、多次元配列のようなものを実現するためにはリストを入れ子にする必要があります。リストを入れ子にするには、リストの中にリストを定義することで実現できます。
リストに含まれている要素を調べる
リストの中にある要素を調べるにはindexメソッドを使用します。indexメソッドを使用することで指定したデータが、リストの何番目に入っているかを調べることができます。
ディクショナリ
Pythonにはキーと呼ばれる文字列と数値を紐付けてデータを格納するディクショナリというものがあります。中括弧の中に、「キー:データ」の形で定義します。ディクショナリの中にはキーを指定してアクセスすることができます。注意する点としてはデータのアクセス、代入には{}ではなく[]を使うことです。
タプルの使い方
Pythonではデータをまとめて格納するために、「タプル」も使えます。タプルは()を用いて定義することができます。タプルに入っているデータにはリストの後ろに[]と0から始まる番号を用いてアクセスすることができます。ただし、タプルのデータはリストとは異なり、代入ができません。
制御文
While文
ある条件式が成り立つ間、処理を繰り返すループを作るにはwhile文を使います。while文は次のように記述します。
条件式の最後にはコロン「:」を付け、処理内容の記述の際にはwhile文よりもインデントを付けて記入する必要があリます。インデントはif文やfor文でも使用します。また、制御文内の処理はインデントの数をそろえる必要があります。条件式には「==(等号)」、「!=(不等号)」、「<(より小さい)」、「>(より大きい)」、「<=(以上)」、「>=(以下)」が使えます。
for文
for文は他の言語のものとは少し意味が異なります。Pythonのfor文は与えられたリストに含まれているデータの数だけ処理を実施します。何番から何番までの回数繰り返すとういう記述ではありません。
if文
if文は他の言語とほぼ同じように使えます。条件を複数設定する場合は「elif」、条件に合致しない場合の処理は「else」で記述できます。どの条件文にも「:(コロン)」を付ける必要があります。
論理演算子は次のように記述できる。
- A かつ B: A and B
- A または B: A or B
- A でなければ: not A
ファイル入出力
ファイルを開く、閉じる
ファイル操作を行うには、まずファイルを開く必要があります。ファイルを開くにはopen関数を使います。ファイルの開き方にはいくつかの種類があり、データを新規に書き込むときは「w」を、データを読み込むときは「r」、データを追記する時は「a」を指定します。
ファイル操作が終わった後は、ファイルを閉じる必要があります。ファイルを閉じることでファイル操作が完了します。ファイルを閉じるにはcloseメソッドを使います。
ファイルから読み込む
ファイルからの読み込みにもいくつか種類があります。readメソッドは括弧内で指定する数字の分だけ文字列を読み込みます。数値の指定がないときは全てを読み込みます。readlineメソッドはファイルから1行を読み込みます。括弧の中には1行の内、何文字を読み込むかを指定できます(括弧内の指定がなければ1行すベて読込)。readlinesメソッドは複数行を読み込みます。括弧の中は読み込む行のサイズを指定できます。また、逐次ファイルを読み込みながら作業をしたい場合は、for文にopenしたフアイルを引き渡すことで1行ずつ狭み取る処理を実施することができます。読み込みの例として次のようなファイルを用意して、その中身を1行づつ読み取りたいと思います。
コード例を次に示します。
ファイルに書き込む
ファイルへの書き込みはwriteメソッドを使います。括弧の中には書き込む文字列を指定します。括弧の中は変数でも大丈夫です。書き込む文字列を改行したい場合は文字列の末尾に「\n」のエスケープ文字を付けることで実現できます。
format文で書き込む
書き込み際にあるフォーマットの一部だけを変数として、文字列を書き込みたいときがあります。その場合はformat文を使用します。format文は次の文法で使用します。
format文を使用することで、数値データの桁数や表示形式(指数表示など)の処理ができるようになります。
with文
open関数とcloseメソッドは一対で使用しますが、closeメソッドの書き忘れによる予期せぬバグの発生や、コードの冗長性の増加など不都合な点があります。Python2.6以降ではwith文を用いることで簡潔にファイルオブジェクトの処理を記述することができます。with文でファイルオブジェクトを開くときは、次の様にして記述します。
例題:ファイル内容の取得と任意形式の出力
例題としてあるファイルの中身から、欲しいデータを抜き出すコードを作ってみます。サンプルのファイルを次のコードで作成します。「result~」の行が欲しい行だと仮定します。
次のような内容のデータができます。
今回はresultと書いてある行の後ろの数値を読み取り、カンマ区切りで出力してみたいと思います。まずはファイルを開き、読み込んでいきます。読み込みながら、行の中身を確認して、resultと書いてある行だけ読み込みます。読み込みの際に空白で、iの文字列を区切り、リストに格納します。文字列を区切るのにはsplitメソッドを使用します。空白区切りの場合は「~.split()」を使用します。その他の文字で区切る場合は()の中に区切り文字を入力します(カンマ区切りの場合は「~split(',')」)。splitメソッドで区切ったものはリストとなり、すべて文字列になります。
次の例ではデータがa、b、cの3つですが、aとbの間にスペースが2つあります。スペースをsplitメソッドできちんと指定した場合はリストを見ると4つのデータが入ってしまっています。
先ほどデータを格納したtempの中身は次のようになっています。
読み込んだデータをexample2.txtに出力します。読み込んだデータは入れ子のリストになっているので、まずリスト「temp」の長さをlen関数を使用して測定し、その大きさ分だけfor文を実行します。カンマ区切りの書き込みはformat文を使用します。一つ目の数?だけ、小数点第二までの指数表示として出力します(文字列で読み込んでいるので、float関数で変換が必要です)。
example2.txtの中身が次の様になっていたら完成です。
Python スクリプトファイルの作成
py ファイルについて
これまではPythonの実行を対話形式で行ってきました。ただ、打ち込む内容が長いと対話形式では限界があります。そこで、pythonのコードをスクリプトファイルというファイルに記述し、打ち込む手間を減らしたいと思います。pythonは実行するコードを「.py」という拡?子のテキストファイルに記述することで、何度でも実行可能なファイルにすることができます。
py ファイルの実行
pyファイルの実行はコマンドプロンプトを開いて、次のコマンドを打ち込んで実行します(「Sample.py」の部分は実行したいpyファイルの名前に置き換えてください)。
例題のスクリプト化
それでは試しに先ほどの例題をスクリプト化してみます。ファイルを作成するスクリプトを「MakeDammy.py」、欲しいデータを抜き出すスクリプトは「DataOutput.py」とします。まずは「MakeDammy.py」を作るために、テキストファイルを作成します。
スクリプトの記述
スクリプトの中身を記述するために、メモ帳などで.pyファイルを開きます。
メモ帳で開いたら例題のダミーファイルを作成するコードを次のように記述します。スクリプトファイルは空白行を入れることができるので、読みやすいように適宜空白行を入れて可読性を向上させましょう。またコメントは「#」で入力できます。#を入力した行は、行内の#以降の文章がコメント文となり、読み飛ばされます。また、コード内で日本語を使用する場合「#coding:utf-8」と入力しておきます(Python2では必需品でした)。
スクリプトファイルの実行
実行はMakeDammy.pyファイルをダブルクリックします。(アイコンがPythonのアイコンになっているときのみ)。実行してsample.txtが作成されていることを確認します。
例題
同様にして例題の残りをスクリプト化しましよう。(sample2.txtが出力できれば成功です。)スクリプトファイルの名称は「DataOutput.py」とします。
スクリプトファイルの回答は次の通りです。
例外処理
例外処理の記述方法
スクリプトファイルを作成し、実行可能なコードを作成していくと、例外処理が必要になることがあります。例外処理はエラーが発生した際に適切な対応をスクリプトにさせるための記述方法になります。例外処理は次の様にして記述できます。
例題
試しに簡単な例外処理を記述します。先ほど作成した「DataOutput.py」に例外処理を追加します。
example3.txtが存在しない状態で、書き換えたDataOutput.pyを実行します。example3.txtがないので、error.txtが出力され、内部にエラーメッセージが書き込まれます。
モジュールの利用
モジュールの使い方
Pythonはライブラリが豊富に存在しています。それらのライブラリはモジュールとして、Pythonに読み込むことで標準文法で使用できない機能を使用できるようになリます。Pythonでモジュールをインポートするときは「from~import~」文を使用します。インポートして初めてモジュールの機能を使用できるようになります。