Python3で一時ディレクトリ(tmp/temp)を使う方法
Python3でファイル出力するコードを書いているとき、一時(tmp/temp)ディレクトリを使いたくなるときってありませんか??
cre8cre8もPython3でファイル(html)を出力しているのですが、ファイル出力まわりの
ユニットテストを回すときに出力先パスが原因で
ローカルではオールグリーンなのに、CIではレッドがでるときがありました。
そこで、出力先を一時(tmp/temp)ディレクトリにすることで、ローカルでもCIでもスト結果を同一にすることができたので、
今回は一時(tmp/temp)ディレクトリを作る方法をご紹介します。
それでは、まずはwith構文を使って一時(tmp/temp)ディレクトリを作成します。
tempfile_using_with.py | |
---|---|
1 | import tempfile |
2 |
|
3 | with tempfile.TemporaryDirectory() as temp_path: |
4 | write_path = temp_path + '/foo.txt' |
5 | with open(write_path, 'w') as fp: |
6 | fp.write('foo') |
with構文を使用して
tempfile.TemporaryDirectory
メソッドを使用すると、asで指定した変数(この場合はtemp_path)に一時ディレクトリのパスが設定されます。
このパスを利用して一時ディレクトリの中にファイルを作成することができます。
では、次にwith構文を使わない場合のPythonプログラムをみてみましょう。
tempfile_not_using_with.py | |
---|---|
1 | import tempfile |
2 |
|
3 | temp = tempfile.TemporaryDirectory() |
4 | write_path = temp.name + '/foo.txt' |
5 | fp = open(write_path, 'w') |
6 | fp.write('foo') |
7 | fp.close() |
8 | temp.cleanup() |
サンプルではcleanupメソッドを使用して明示的にお片付けをしていますが、
Pythonのガベージコレクションにおまかせしても大丈夫です。
私は明示的にお片付けする癖がC言語でついてしまっているので、明示的に片付けたい主義です"笑
ところで、みなさんは一時ディレクトリはtmp派ですか?temp派ですか??
ちなみに私はtmp派ですw