1.2.7. 標準ライブラリ¶
注釈
この節の参考ドキュメント:
Python 標準ライブラリのドキュメント: https://docs.python.org/library/index.html
- Python Essential Reference, David Beazley, Addison-Wesley Professional
1.2.7.1. os
モジュール: オペレーティングシステムの機能¶
“OS 依存の機能をポータブルな方法で提供します。”
1.2.7.1.1. Directory and file manipulation¶
現在のディレクトリ:
In [17]: os.getcwd()
Out[17]: '/Users/cburns/src/scipy2009/scipy_2009_tutorial/source'
ディレクトリの一覧:
In [31]: os.listdir(os.curdir)
Out[31]:
['.index.rst.swo',
'.python_language.rst.swp',
'.view_array.py.swp',
'_static',
'_templates',
'basic_types.rst',
'conf.py',
'control_flow.rst',
'debugging.rst',
...
ディレクトリを作る:
In [32]: os.mkdir('junkdir')
In [33]: 'junkdir' in os.listdir(os.curdir)
Out[33]: True
ディレクトリの名前を変える:
In [36]: os.rename('junkdir', 'foodir')
In [37]: 'junkdir' in os.listdir(os.curdir)
Out[37]: False
In [38]: 'foodir' in os.listdir(os.curdir)
Out[38]: True
In [41]: os.rmdir('foodir')
In [42]: 'foodir' in os.listdir(os.curdir)
Out[42]: False
ファイルの削除:
In [44]: fp = open('junk.txt', 'w')
In [45]: fp.close()
In [46]: 'junk.txt' in os.listdir(os.curdir)
Out[46]: True
In [47]: os.remove('junk.txt')
In [48]: 'junk.txt' in os.listdir(os.curdir)
Out[48]: False
1.2.7.1.2. os.path
: パスの操作¶
os.path
はパスの名前に関する一般的な操作法を提供します.
In [70]: fp = open('junk.txt', 'w')
In [71]: fp.close()
In [72]: a = os.path.abspath('junk.txt')
In [73]: a
Out[73]: '/Users/cburns/src/scipy2009/scipy_2009_tutorial/source/junk.txt'
In [74]: os.path.split(a)
Out[74]: ('/Users/cburns/src/scipy2009/scipy_2009_tutorial/source',
'junk.txt')
In [78]: os.path.dirname(a)
Out[78]: '/Users/cburns/src/scipy2009/scipy_2009_tutorial/source'
In [79]: os.path.basename(a)
Out[79]: 'junk.txt'
In [80]: os.path.splitext(os.path.basename(a))
Out[80]: ('junk', '.txt')
In [84]: os.path.exists('junk.txt')
Out[84]: True
In [86]: os.path.isfile('junk.txt')
Out[86]: True
In [87]: os.path.isdir('junk.txt')
Out[87]: False
In [88]: os.path.expanduser('~/local')
Out[88]: '/Users/cburns/local'
In [92]: os.path.join(os.path.expanduser('~'), 'local', 'bin')
Out[92]: '/Users/cburns/local/bin'
1.2.7.1.3. 外部のコマンドを実行¶
In [8]: os.system('ls')
basic_types.rst demo.py functions.rst python_language.rst standard_library.rst
control_flow.rst exceptions.rst io.rst python-logo.png
demo2.py first_steps.rst oop.rst reusing_code.rst
注釈
os.system
の代替
注目に値する os.system
の代替として sh module があります。これは、外部コマンドの入出力ストリームや終了コードを取得するより便利方法を提供してくれます。
In [20]: import sh
In [20]: com = sh.ls()
In [21]: print com
basic_types.rst exceptions.rst oop.rst standard_library.rst
control_flow.rst first_steps.rst python_language.rst
demo2.py functions.rst python-logo.png
demo.py io.rst reusing_code.rst
In [22]: print com.exit_code
0
In [23]: type(com)
Out[23]: sh.RunningCommand
1.2.7.1.4. ディレクトリの走査¶
os.path.walk
はディレクトリツリー以下のファイル名を生成します.
In [10]: for dirpath, dirnames, filenames in os.walk(os.curdir):
....: for fp in filenames:
....: print os.path.abspath(fp)
....:
....:
/Users/cburns/src/scipy2009/scipy_2009_tutorial/source/.index.rst.swo
/Users/cburns/src/scipy2009/scipy_2009_tutorial/source/.view_array.py.swp
/Users/cburns/src/scipy2009/scipy_2009_tutorial/source/basic_types.rst
/Users/cburns/src/scipy2009/scipy_2009_tutorial/source/conf.py
/Users/cburns/src/scipy2009/scipy_2009_tutorial/source/control_flow.rst
...
1.2.7.1.5. 環境変数:¶
In [9]: import os
In [11]: os.environ.keys()
Out[11]:
['_',
'FSLDIR',
'TERM_PROGRAM_VERSION',
'FSLREMOTECALL',
'USER',
'HOME',
'PATH',
'PS1',
'SHELL',
'EDITOR',
'WORKON_HOME',
'PYTHONPATH',
...
In [12]: os.environ['PYTHONPATH']
Out[12]: '.:/Users/cburns/src/utils:/Users/cburns/src/nitools:
/Users/cburns/local/lib/python2.5/site-packages/:
/usr/local/lib/python2.5/site-packages/:
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5'
In [16]: os.getenv('PYTHONPATH')
Out[16]: '.:/Users/cburns/src/utils:/Users/cburns/src/nitools:
/Users/cburns/local/lib/python2.5/site-packages/:
/usr/local/lib/python2.5/site-packages/:
/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5'
1.2.7.2. shutil
: 高レベルなファイル操作¶
shutil
は便利なファイル操作を提供します:
shutil.rmtree
: ディレクトリツリーを再帰的に削除します.
shutil.move
: ファイルやディレクトリを他の場所に再帰的に移動させます.
shutil.copy
: ファイルやディレクトリをコピーします.
1.2.7.3. glob
: ファイル名のパターンマッチング¶
glob
モジュールはファイル名のパターンマッチングに便利なモジュールを提供します.
.txt
で終わるファイル全てを探す:
In [18]: import glob
In [19]: glob.glob('*.txt')
Out[19]: ['holy_grail.txt', 'junk.txt', 'newfile.txt']
1.2.7.4. sys
モジュール: システム固有の情報¶
Python インタプリタに関わるシステム固有の情報。
実行している Python のバージョンやインストールされた場所を調べる:
In [117]: sys.platform Out[117]: 'darwin' In [118]: sys.version Out[118]: '2.5.2 (r252:60911, Feb 22 2008, 07:57:53) \n [GCC 4.0.1 (Apple Computer, Inc. build 5363)]' In [119]: sys.prefix Out[119]: '/Library/Frameworks/Python.framework/Versions/2.5'
Python スクリプトに渡されたコマンドライン引数のリスト:
In [100]: sys.argv Out[100]: ['/Users/cburns/local/bin/ipython']
sys.path
はモジュールの検索パスを示す文字列のリストで PYTHONPATH によって初期化されます.
In [121]: sys.path
Out[121]:
['',
'/Users/cburns/local/bin',
'/Users/cburns/local/lib/python2.5/site-packages/grin-1.1-py2.5.egg',
'/Users/cburns/local/lib/python2.5/site-packages/argparse-0.8.0-py2.5.egg',
'/Users/cburns/local/lib/python2.5/site-packages/urwid-0.9.7.1-py2.5.egg',
'/Users/cburns/local/lib/python2.5/site-packages/yolk-0.4.1-py2.5.egg',
'/Users/cburns/local/lib/python2.5/site-packages/virtualenv-1.2-py2.5.egg',
...
1.2.7.5. pickle
: 簡単な永続化¶
任意のオブジェクトをファイルに保存するのに便利です. 安全, 高速ではありません!
In [1]: import pickle
In [2]: l = [1, None, 'Stan']
In [3]: pickle.dump(l, file('test.pkl', 'w'))
In [4]: pickle.load(file('test.pkl'))
Out[4]: [1, None, 'Stan']
練習問題
site.py
モジュールが PYTHONPATH
のどこにあるか検索するプログラムを書きましょう.