Python 临时文件、目录的生成

1. 问题

创建一个临时文件夹或目录,并希望使用完之后自动销毁。



2. 解决方案

tempfile 模块中很多的函数可以完成这任务。

创建一个匿名临时文件,可以使用tempfile.TemporaFile这种方式文件会自动销毁

from tempfile import TemporaryFile

with TemporaryFile('w+t') as f:
    # Read/write to the file
    f.write('Hello World\n')
    f.write('Testing\n')

    # 返回到开头并读取数据
    f.seek(0)
    data = f.read()
    print(data)
f = TemporaryFile('w+t')
f.write('Hello World\n')
f.write('Testing')
f.seek(0)
print(f.read())

上述两种方法等价。输出:

Hello World
Testing

TemporaFile 的第一个参数是文件模式,文本模式使用w+t,二进制模式使用w+bTemporaryFile() 另外还支持跟内置的 open() 函数一样的参数。

with TemporaryFile('w+t', encoding='utf-8', errors='ignore') as f:

创建有名字的临时文件。可以使用NamedTemporaryFile()这种方式文件会自动销毁

from tempfile import NamedTemporaryFile

f = NamedTemporaryFile(prefix='mytemp', suffix='.md', dir='C:/Users/T14/AppData/Local/Temp/')
print(f.name)
C:\Users\T14\AppData\Local\Temp\mytempcecb12hp.md

创建临时目录。可以使用tempfile.TemporaryDirectory

from tempfile import TemporaryDirectory

dir = TemporaryDirectory()
print(dir.name)

with TemporaryDirectory() as dirname:
    print(dirname)

上述两种方法等价。输出:

C:\Users\T14\AppData\Local\Temp\tmpac0p48m1
C:\Users\T14\AppData\Local\Temp\tmphjcngywq


3. 讨论

TemporaryFile()NamedTemporaryFile()TemporaryDirectory() 是处理临时文件、目录的最简单的方式了,因为它们会自动处理所有的创建和清理步骤。 在一个更低的级别,你可以使用 mkstemp()mkdtemp() 来创建临时文件和目录。比如:

import tempfile

tmp = tempfile.mkstemp()		# 生成临时文件
print(tmp)
print(tempfile.gettempdir())	# 查看临时文件、目录路径	
tmp2 = tempfile.mkdtemp()		# 生成临时目录
print(tmp2)
print(tempfile.gettempdir())	
(3, 'C:\\Users\\T14\\AppData\\Local\\Temp\\tmp8al28qr3')
C:\Users\T14\AppData\Local\Temp
C:\Users\T14\AppData\Local\Temp\tmphdj6ac__
C:\Users\T14\AppData\Local\Temp

但是,这些函数并不会做进一步的管理了。 例如,函数 mkstemp() 仅仅就返回一个原始的OS文件描述符,你需要自己将它转换为一个真正的文件对象。 同样你还需要自己清理这些文件。


所有和临时文件相关的函数都允许你通过使用关键字参数 前缀prefix 、后缀suffix 和 文件路径dir 来自定义目录以及命名规则。比如:

f = NamedTemporaryFile(prefix='mytemp', suffix='.md', dir='C:/Users/T14/AppData/Local/Temp/')
print(f.name)
C:\Users\T14\AppData\Local\Temp\mytempyqr3xvy7.md

最后一点,尽可能以最安全的方式使用 tempfile 模块来创建临时文件。



来自:python3-cookbook

posted @ 2022-08-11 20:23  做梦当财神  阅读(739)  评论(0编辑  收藏  举报