cre8cre8
AskMe♥

Python3で一時ディレクトリ(tmp/temp)を使う方法

Python3でファイル出力するコードを書いているとき、一時(tmp/temp)ディレクトリを使いたくなるときってありませんか??

cre8cre8もPython3でファイル(html)を出力しているのですが、ファイル出力まわりの
ユニットテストを回すときに出力先パスが原因で
ローカルではオールグリーンなのに、CIではレッドがでるときがありました。

そこで、出力先を一時(tmp/temp)ディレクトリにすることで、ローカルでもCIでもスト結果を同一にすることができたので、
今回は一時(tmp/temp)ディレクトリを作る方法をご紹介します。

それでは、まずはwith構文を使って一時(tmp/temp)ディレクトリを作成します。

tempfile_using_with.py
1import tempfile
2
3with 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
1import tempfile
2
3temp = tempfile.TemporaryDirectory()
4write_path = temp.name + '/foo.txt'
5fp = open(write_path, 'w')
6fp.write('foo')
7fp.close()
8temp.cleanup()

サンプルではcleanupメソッドを使用して明示的にお片付けをしていますが、
Pythonのガベージコレクションにおまかせしても大丈夫です。
私は明示的にお片付けする癖がC言語でついてしまっているので、明示的に片付けたい主義です"笑

ところで、みなさんは一時ディレクトリはtmp派ですか?temp派ですか??
ちなみに私はtmp派ですw

≪ 前の記事
たった30行でPython3のマルチスレッドを使ってみる
次の記事 ≫
さっくりとgemを公開してみる

いいねやコメントを送っていただけると中の人がしっぽ振って大喜びします♪

あなたへのおすすめの記事