2013/03/29

ライブラリ:sys

Pythonの「sys」というライブラリについてご紹介します。

import sys
「sys」は、Pythonのインタプリタ、実行環境に関係した変数や関数がまとめられたライブラリです。

sys.path
sys.pathはPythonパス(PYTHONPATH)をリストにして返します。リストの一番目の要素(sys.path[0])は実行中のスクリプトが含まれたフォルダが入っています。

sys.platform
スクリプトが置かれているOSを表す文字列が入っています。私の環境では「win32」が入っていました。

sys.argv
スクリプトをターミナル(コマンドプロンプト)から実行したときの引数を返してくれます。argv[0]はスクリプトの名前そのものが入っていることが多いようですが、実行の仕方によって異なることもあるようです。ふたつめの要素以降は、実行時のオプションやその他の引数が入っています。

・・・以上です。

ちなみに、Pythonコードが、他のファイルから読み込まれたモジュールではなく、スクリプトとして実行された場合を特定するには、__name__という名前を次のように調べることが多いです。
if __name__ == '__main__':
    # スクリプトとして実行されたときの処理
    # ...
このコードを書いておくと、スクリプトとして実行されたときだけに特定の処理を行うことが可能です。


インストール
「sys」は標準ライブラリに含まれているので、Pythonと別途インストールする必要はありません。


参考
sys - Python公式ドキュメント

2013/03/26

ライブラリ:os

Pythonの「os」というライブラリについてご紹介します。

import os

osライブラリは、OS(オペレーティングシステム)に依存した機能を使うための標準ライブラリです。Pythonをインストールするとデフォルトで入っているため、「import os」と打つだけで使い始めることができます。

使える変数や関数は、使っているOSによって若干異なります。

以下、osライブラリが提供する機能のうち個人的に使用頻度の高い関数をいくつかご紹介します。

os.getcwd()
getcwd()は、現在の作業ディレクトリを返してくれます。「GET Current Working Directory」ですね。Linuxでいう「pwd」コマンドです。

os.listdir(path)
パス上のファイルやディレクトリの一覧をリストで返します。os.listdir('.')とすると、現在の作業ディレクトリ内にあるファイル一覧を返してくれます。

os.mkdir(adir)
os.rmdir(adir)
mkdir()は指定した名前のディレクトリを作成、rmdir()は削除します。

また、os.pathというライブラリ(サブライブラリ?)の中には、パス関連の関数がまとまって入っています。

os.path.split(path)
パスを親ディレクトリとファイル名に分割して返します。たとえば、os.path.split(os.getcwd())とすると、[親ディレクトリのパス, 作業ディレクトリ]という2要素のリストを返してくれます。

os.path.splitext(filename)
ファイルの拡張子の部分を分割して返します。[ファイル名, 拡張子]というリストが返ってきます。

os.sep
Windowsなら「\\」、Unix系なら「/」とパスの区切り文字はOSによって異なりますが、os.sepは実行環境のOSの区切り文字を格納しています。区切り文字の部分をハードコーディングせずこのos.sepを使えば、OSを変えてもパスの変更に煩わされることが少なくなるかと思います。

os.path.join(パス, ファイル名)
os.path.split()と逆で、パスとファイル名をつないで返してくれます。

以上です。


インストール
「os」は標準ライブラリに含まれているので、Pythonと別途インストールする必要はありません。


参考
os - Python公式ドキュメント

2013/03/21

Pythonにまつわるアイデア:BDFL

余談になりますが、Pythonにまつわる「BDFL」ということばをご紹介します。

「BDFL」というのは「Benevolent Dictator for Life」の略で、Pythonの生みの親であるGuido van Rossumを指すことばです。

「benevolent」は「親切な」「慈悲深い」、「dictator」は「暴君」「独裁者」、「for life」は「一生涯続く」「死ぬまでの」といった意味で、全体をまとめる日本語訳としては「慈悲深き終身独裁者」という訳が使われることが多いようです。

オリジナルはこのGuido van Rossumを指すことばとして最初に使われたそうですが、ほかにもオープンソースソフトウェアの開発をリードする偉大な人々――リーナス・トーバルズなどを指すときにもこのBDFLということばが使われることがあるようです。

BDFLということばの発端についてGuido van Rossum自身が説明したページなんかもありました。こちらもよろしければ。

参考

BDFL - Wikipedia
Origin of BDFL

2013/03/13

Pythonのライブラリ(モジュール)の使い方

Pythonのライブラリ・モジュールの使い方についてご紹介します(モジュールの「作り方」についてはここでは述べていません)。

import os
print os.sep
Pythonでは、import文によりモジュールをインポートすることができます。importしたモジュール内の関数やクラス名は「[モジュール名].[名前]」という形で使うことができます。

この場合は、「os」というモジュールから「sep」という名前を使っています。

from urllib2 import urlopen
result = urlopen(url)
モジュールのうち特定の名前だけに限定してインポートしたい場合は、「from [モジュール名] import [名前]」という形を使います。このような形でインポートした名前は頭にモジュール名をつけず単体でそのまま使うことができます。

この場合は、「urllib2」というモジュールから「urlopen」という関数を読み込んでいます。

このやり方をする場合は、名前が衝突しないように注意が必要です。

from xml.etree.ElementTree import parse
ライブラリが何重にもまとめられている場合には、「.」を使って「[親].[子].[孫]」という形で掘り下げていきます。

この場合は、親が「xml」、子が「etree」、孫が「ElementTree」で、そのモジュールから「parse」という名前を読み込んでいます。

import numpy as np
valx = np.random.random(10)
インポートする際に「as [名前]」をつけると、その後はその名前を使ってモジュールにアクセスすることができます。

from urllib2 import *
「from [モジュール名] import *」を使うと、そのモジュールのすべての名前(ただしほかのモジュールからアクセス可能なもののみ)をインポートすることもできます。

・・・以上です。

2013/03/04

Python の予約語

ここでは Python の予約語について見てみます。

予約語は構文上特殊な意味を持つことばなので、同じ名前を持つ変数や関数を登録することはできません。Pythonでは、次の単語が予約語としてあらかじめ使われています。

and as assert break class continue def del elif else except exec finally for from global if import in is lambda not or pass print raise return try while with yield

おもな使いどころはそれぞれ次のとおりとなっています。

  • and: 論理演算の論理積
  • as: モジュールのimport時、ファイルのwith読み込み時
  • assert: 与えられた式がFalseならErrorをあげるassert文
  • break: ループを途中で抜ける
  • class: クラスの宣言
  • continue: ループ中次のループへと飛ぶ
  • def: 関数の宣言
  • del: 変数(名前)の削除
  • elif: if文のelse if部分
  • else: if文のelse
  • except: 例外処理のtry~except文
  • exec: 与えられた文字列をPythonコードとして評価するexe文(Python3から関数化)
  • finally: for、if、tryなどの分岐処理の末尾につける
  • for: forループ
  • from: import文で親ライブラリを指定する
  • global: グローバル変数を利用する
  • if: if文
  • import: モジュールのインポート
  • in: forやifと組み合わせて
  • is: 比較演算
  • lambda: 無名関数をつくるlambda式
  • not: 論理演算の否定
  • or: 論理演算の論理和
  • pass: 何も処理を行わないブロックを埋める
  • print: print文(python3から関数化)
  • raise: エラーをあげる
  • return: 関数やメソッドの戻り値を指定する
  • try: 例外処理のtry~except文
  • while: whileループ
  • with: ファイルの読み込み
  • yield: ジェネレータの戻り値を指定する


参考
キーワード(予約語) - 公式サイト