什么样的情况下需要我创建临时文件呢?我很早就知道tempfile这个模块,但一直没有使用过它,也没有兴趣去研究它,一度认为自己用不到这个模块。存在即合理,合理的才能存在,想来是我不够虚心,才没有看到这个模块的应用价值。
1. 临时文件目录
在linux系统下有一个/tmp 目录,这个目录下存储的都是些临时文件,创建这些临时文件的可能是操作系统,也可能是你安装的某个软件系统,比如hadoop,你自己写的程序也可以对这里的文件进行读写操作。
临时文件目录下的文件夹和文件,会被定期清理,默认是30天。这就要求/tmp目录下存储的文件,必须都是可删除的文件,删除后不能对系统或软件的运行产生影响。
windows系统下也有类似的文件夹,在我的电脑上,这个目录是C:\Users\zhangdongsheng\AppData\Local\Temp 。
2. tempfile
使用tempfile模块,可以创建临时文件和临时文件夹,主要应用它的两个函数,mkstemp 和 mkdtemp
from tempfile import mkstemp, mkdtemp
path = mkdtemp() # 创建临时文件夹
print(path)
_, filepath = mkstemp() # 创建临时文件
print(filepath)
什么样的场景下需要使用临时文件呢?我归纳总结为一条:程序运行后,你再也不会使用这些文件时,就可以创建为临时文件。
程序一旦结束,运行期间所创建的文件便失去应用价值,那么这样的文件就可以创建为临时文件。所谓临时文件,本质上就是在/tmp 目录下创建的文件,会定期清理。
由于这些文件在程序结束后不会再被使用,那么我们也就不必关心它在哪里创建,不必担心它因为长期积累而占用磁盘空间,我们甚至不用考虑为它起一个名字,tempfile模块会为临时文件取一个随机的名称。
这些文件存在于程序运行期间,tempfile模块简化了我们对这些文件的管理,mkdtemp和mkstemp会返回文件夹和文件的路径,这可以确保我们能够对文件夹和文件进行操作但又不必去管理他们,这些管理包括新建,删除等操作。
3. tempfile 使用技巧
尽管我们创建的是临时文件,但在特定情况下,依然需要我们做一些简单的管理,比如设置文件的前缀和后缀
def mkstemp(suffix=None, prefix=None, dir=None, text=False):
pass
通过设置suffix 和 prefix 参数,可以决定文件名称的后缀和前缀,如果在调试程序期间你需要查看临时文件,这些前缀和后缀可以提供一些帮助。
dir参数,决定临时文件在哪个文件夹下被创建,默认是在/tmp目录下创建,你可以设置为自己管理的文件夹。
4. 总结
在程序运行期间产生的中间文件既不能作为程序的输出成果来展示,也没有后续的应用价值,创建为临时文件,则不必去管理他们。