Python 模块 Tempfile

Python 模块 Tempfile

Python 模块 tempfile 目的是在系统中创建临时文件。

使用模块 tempfile,在系统中创建一个临时文件,具有安全的唯一文件名,防止被其他人猜出或者数据被盗。模块还提供了多种方法生成临时文件,例如 TemporaryFile() 函数返回一个未命名的临时文件,NamedTempraryFile() 函数返回一个带有名称的临时文件,SpooledTemporaryFile 在内容写入文件前,会把内容缓存在内存中,TemporaryDirectory 实现了内容管理器上下文接口,当操作结束后会自动删除目录。

临时文件


应用有时需要使用临时文件存储数据,而不需要和其他应用共享。可以使用 TemporaryFile() 函数创建文件,因为不在系统文件表(file system table)中引用,其他应用也不会访问到。当调用 close() 方法后或者在 with 语句后,临时文件会自动删除。

Python 模块 Tempfile

执行:

Python 模块 Tempfile

这个例子使用了两种方法创建文件,一种是使用内置函数 open(),创建的文件有名称,并且在系统中存在。最后需要再使用 os.remove() 函数手动删除。使用 TemporaryFile() 函数创建的文件名称是一个数字,with 语句后会自动删除临时文件。

默认 TemporaryFile() 打开的文件模式是 w+b,这样是为了方便在更多平台直接使用。

Python 模块 Tempfile

执行:

Python 模块 Tempfile

可以使用参数 mode 改变默认的行为。

Python 模块 Tempfile

执行:

Python 模块 Tempfile

在本例,文件对象使用文本模式。

命名文件


有时候,需要使用有名称的临时文件,在跨进程或者跨主机的应用使用。使用函数 NamedTemporaryFile() 。

Python 模块 Tempfile

执行:

Python 模块 Tempfile

Spooled File


函数 SpooledTemporaryFile() 它使用 io.BytesIO 或 io.StringIO 作为缓存,把文件内容存储在内存中,直到一个临界值(threshold),然后才写入到磁盘,然后缓存变为 TemporaryFile()。

Python 模块 Tempfile

执行:

Python 模块 Tempfile

这个例子中,缓存大小为100,一开始使用的 io.StringIO 存储在内存中,当数据量大于100时,_rolled 属性变为 True,io.StringIO 替换为 io.TextIOWrapper。

临时目录


当想要创建更多的临时文件时,更便利的方法是创建一个临时目录,然后在临时目录中再创建临时文件。

Python 模块 Tempfile

执行:

Python 模块 Tempfile

本例中,使用 TemporaryDirectory() 函数创建了临时目录,然后创建了一个临时文件,写入了一些内容。

with 语句后,临时目录和文件都不存在了。

临时文件位置


根据平台的不同,文件存储位置也不同,你也可以显示的使用参数 dir 改变默认存储位置。tempfile 包含两个方法获取存储的位置信息。

Python 模块 Tempfile

执行:

Python 模块 Tempfile

本例中,修改属性 tempdir 对临时目录进行了修改。


分享到:


相關文章: