osモジュールは「環境変数を取得・変更したり、フォルダやファイルを作成・変更・削除したりできる」モジュールです。
ここではosモジュールの各関数の使い方をご紹介します。
環境変数の情報を取得・変更する - environ -
プログラムの中で環境変数の情報を取得したり、設定を追加・変更・削除するにはos.environ()を使います。
なお、変更した環境変数はそのプログラム内でのみ有効で、OS上の環境変数自体が変わるわけではないので注意が必要です。
環境変数を取得する
環境変数を全て取得したい場合はそのままprint()で出力します。
import os
print(os.environ)
[出力結果]
environ({'TERM_PROGRAM': 'vscode', 'TERM': 'xterm-256color', …省略... '__PYVENV_LAUNCHER__': '/usr/local/bin/python3'})
os.environで取得できるパラメータは辞書のようにkeyとvalueで構成されています。
辞書と同じくitems()を加えることでkey, valueそれぞれをループ処理で取得できます。
import os
for k, v in os.environ.items():
print(f'{k} = {v}')
[出力結果]
TERM_PROGRAM = vscode
TERM = xterm-256color
...省略...
__PYVENV_LAUNCHER__ = /usr/local/bin/python3
同様に、keys()やvalues()で各値を取得したり、in()で環境変数が存在するかを確認できます。
また、os.environのあとに環境変数のkeyを指定することでvalueを取得することもできます。
import os
#keys()
print(f'keys = {os.environ.keys()}')
#values()
print(f'values = {os.environ.values()}')
#in
print('TERM' in os.environ)
#key指定
print(os.environ['TERM'])
[出力結果]
TERM_PROGRAM
TERM
SHELL
...省略
vscode
xterm-256color
/bin/bash
...省略
True
xterm-256color
なお、key指定は存在しないkeyを指定するとKeyErrorになります。
KeyErrorではなく指定したデフォルト値を取得したい場合はgetenv()を使います。
import os
print(os.getenv('ABC', 'default')) #’ABC’は存在しない
[出力結果]
default
環境変数を変更する
os.environで環境変数を変更するにはos.environ[環境変数のkey]の値を上書きすることで変更できます。
import os
print('変更前 : {}'.format(os.environ['TERM_PROGRAM']))
os.environ['TERM_PROGRAM'] = 'program'
print('変更後 : {}'.format(os.environ['TERM_PROGRAM']))
[出力結果]
変更前 : vscode
変更後 : program
なお、最初にも書きましたが、os.environでの環境変数の書き換えはこのプログラム内でのみ有効です。
OS上の環境変数は変わらないので注意してください。
環境変数を削除する
環境変数を削除するにはpop()を使うかdel文を使います。ここではpop()を使って環境変数を削除します。
import os
print('削除前 : {}'.format(os.getenv('TERM_PROGRAM')))
os.environ.pop('TERM_PROGRAM')
print('削除後 : {}'.format(os.getenv('TERM_PROGRAM')))
[出力結果]
削除前 : vscode
削除後 : None
削除後のgetenv()ではTERM_PROGRAMはすでに削除されているので、Noneが返却されています。
フォルダを作成する - mkdir() -
新しいフォルダ(ディレクトリ)を作成するにはos.mkdir()を使います。
1つ目の引数にフォルダパスを指定することで、フォルダを作成できます。
import os
os.mkdir('./sample')
上のコードを実行すると、実行したpythonファイルと同じ階層にsampleフォルダが作成されます。
なお、mkdir()は「既に存在しているフォルダパスを指定する」または「存在しないフォルダ内にフォルダを作ろうとする」とエラーになるので、そこにフォルダを作成できるかチェックする必要があります。
フォルダが存在するかチェックするにはos.path.exists()が便利です。os.path.exists()はフォルダ、ファイル問わず、存在していればTrueを返却します。
import os
path = './abc/def'
prev_dir = './abc'
if os.path.exists(path):
print('既にフォルダが存在しています')
elif not os.path.exists(prev_dir):
print(f'{prev_dir} フォルダが存在しません')
else:
os.mkdir(path)
このように使うことで、フォルダの作成が可能かどうかチェックできます。
フォルダを深い階層まで作成する - makedirs() -
mkdir()では1つのフォルダしか作成できませんが、os.makedirs()を使えば深い階層のフォルダを再帰的に作成できます。
import os
os.makedirs('./abc/def/ghi')
深い階層にフォルダを作成したい場合はmakedirs()がおすすめです。
ファイル・フォルダの名前を変更する - rename() -
rename()を使うことで、ファイルやフォルダの名前を変更できます。
変更前のパスを1つ目の引数、変更後のパスを2つ目の引数に指定します。
import os
os.rename('./sample', './abc') #フォルダ名変更
また、rename()もmkdir()と同じく存在しないファイルやフォルダを指定するとFileNotFoundErrorになるので、あらかじめos.path.exists()で変更前のパスのチェックをしましょう。
ファイルを削除する - remove() -
os.remove()を使うことでファイルを削除できます(フォルダは削除できません)。
引数にファイルパスを指定することで削除できます。
import os
os.remove('./sample2/bbb.py')
これもファイルが存在しない場合エラーになるのでチェックが必要です。
空のフォルダを削除する - rmdir() -
os.rmdir()は空のフォルダを削除できます。
import os
os.rmdir('./sample2')
rmdir()は削除対象のフォルダが空じゃなかった場合はOSErrorになります。例外処理を使うことでエラーだった場合(空ではなかった場合)の処理を記述できます。
import os
try:
os.rmdir('./sample2')
except FileNotFoundError:
print('フォルダが存在していません。')
except OSError:
print('フォルダ内にファイルが存在してます。')
パスとパスを結合する - path.join() -
引数の文字列をパスとして結合するにはos.path.join()を使います。
ただの文字列連結ではなく、結合された文字列がパスになるよう調整してくれます。
import os
path = os.path.join('./', 'abc', 'def', 'ghi.py')
print(path)
[出力結果]
./abc/def/ghi.py