创建一个临时文件夹或目录,并希望使用完之后自动销毁。
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+b
。TemporaryFile()
另外还支持跟内置的 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
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