動かざることバグの如し

近づきたいよ 君の理想に

Python3で一時ファイルを作成する

tempfile.NamedTemporaryFileを使う

>>> import tempfile
>>> f = tempfile.NamedTemporaryFile(mode='w+')
>>> f.name
'/var/folders/6z/xq_8ddx97hq9hzlgwzjjdjbw0000gn/T/tmpncbwgf4y'
>>> f.write('こんにちは')
5
>>> f.seek(0)
0
>>> f.read()
'こんにちは'

一時ファイルの削除

>>> import os
>>> os.remove(f.name)
>>> os.path.exists(f.name)
False

withを使ってブロック形式で書けば自動で一時ファイルが削除される

>>> with tempfile.NamedTemporaryFile(mode='w+') as f:
...     print(f.name)
...     f.write('こんにちは')
...     f.seek(0)
...     print(f.read())
... 
/var/folders/6z/xq_8ddx97hq9hzlgwzjjdjbw0000gn/T/tmp2sxgdmb_
5
0
こんにちは

>>> import os
>>> os.path.exists(f.name)
False
  • f.seek(0)しないとf.read()ができない
  • tempfile.TemporaryFileでも一応出来たが絶対パスが取れない(f.nameがない)のでやめた
  • デフォルトのmodeがバイナリ形式なので注意(mode='w+'を指定する