Pythonの標準ライブラリには、システム操作や環境情報を扱うための強力なモジュールが多数用意されています。本記事では、OSモジュール、IOモジュール、SYSモジュールに焦点を当て解説します。ファイル操作、コマンドライン引数の処理など、実際の開発現場で役立つテクニックを学んでいきましょう。
OSモジュール
osモジュールではシステム情報やデータベースのキー情報など環境変数を使用する場合によく使われます。ファイルやディレクトリの操作も行えますが、pathlibのほうがより使いやすいです。
・listdir()ではフォルダ名とファイル名どちらも取得できます。makedirs()ではフォルダ作成を再帰的に行うため、中間階層のフォルダも作成してくれます。
import os
# 現在のディレクトリを取得
print(os.getcwd())
# 現在のディレクトリ内のフォルダとファイルを取得
print(os.listdir())
# ディレクトリの変更
os.chdir('recipi/10.os/')
# ファイル名変更
os.rename('./test.txt','./test2.txt')
# ファイル削除
os.remove('./test2.txt')
# フォルダ作成
os.mkdir('test_dir')
# フォルダ作成(再帰的)
os.makedirs('test_dir1/test_dir2')
# フォルダ削除
os.rmdir('test_dir1')
# フォルダ削除(再帰的)
os.removedirs('test_dir1/test_dir2')
IOモジュール
IOモジュールではストリームオブジェクトを使用できます。ストリームオブジェクトでは文字列やバイト列をファイルと同じように扱うことができます。Open()によってファイル操作をしているのも、実はストリームオブジェクトを使用しています。ファイルの入出力などのテストの際にインメモリファイルを扱う場合などに利用されます。
・io.StingIO()でオブジェクトを作成し、.write()で書き込み、.read(int)で読み込みを行います。.seek(int)でオフセットの移動をします。.close()した後は、操作ができません。
import io
# StringIOオブジェクト
f=io.StringIO()
f.write('こんにちは、良い天気ですね!')
f.seek(0)
print(f.read(10))
# >>> こんにちは、良い天気
f.seek(0,io.SEEK_END)
f.write('\n私の名前は太郎です!')
print(f.getvalue())
# >>> こんにちは、良い天気ですね!
# >>> 私の名前は太郎です!
f.close()
print(f.getvalue())
# >>> エラーが発生
・withを使った構文でも記述することができます。
# withを使用した構文
text="""1行目ーーーー
2行目ーーーー
3行目ーーーー
"""
with io.StringIO(text) as f:
print(f.getvalue())
# >>> 1行目ーーーー
# >>> 2行目ーーーー
# >>> 3行目ーーーー
Sysモジュール
sysモジュールではPythonのインタプリタに関する情報を取得できます。
・sysモジュールでは、sys.argvでPythonのコマンドライン引数を取得したり、sys.exit()でプログラムの終了、sys.version_infoでバージョン、sys.pathでPython実行資材のパスなどを取得することができます。
import sys, pprint
# sys.argv(コマンドライン引数を取得)
# python 3.sys.py Hello abc 123
print(sys.argv)
# >>> ['3.sys.py', 'Hello', 'abc', '123']
# sys.version_info(Pythonのバージョンを取得)
print(sys.version_info)
# >>> sys.version_info(major=3, minor=12, micro=4, releaselevel='final', serial=0)
# sys.exit(プログラムの終了)
sys.exit("プログラムが終了しました")
pprint.pprint(sys.path)
# >>> インタプリタのパス取得
argparseモジュール
argparseモジュールは、コマンドライン引数の処理ができますので、何かプログラムの外から操作を変えたい場合などに、プログラムを書き換えることなく実行することができます。
・ArgumentParser()でオブジェクトを作成し、.add_argument(引数)でコマンドライン引数で受け取る引数を設定することができます。
・第1引数が省略名、第2引数が引数名、typeは受け取った引数をその方に変換できます。requiredは必須引数、defaultはデフォルト引数になります。choiceは、記述した値以外受け取らなくなります。helpで記述した内容はコマンドラインで「-h」と入力すると記述した説明文が表示されます。その他オプションで引数情報を設定できます。
受け取った引数は.parse_args()でPythonファイル内で操作ができます。
import argparse
# 実行コマンド:python 4.argparse.py -s hello -n 3
parser = argparse.ArgumentParser(description="文字列を返します")
parser.add_argument("-s", "--string", type=str, help="文字を入力", required=True)
parser.add_argument("-n", "--num", type=int, help="数字を入力", default=10)
args = parser.parse_args()
print(args.string * args.num)
# >>> hellohellohello