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

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/279998.html

(0)
上一篇 2022年8月11日 22:23
下一篇 2022年8月11日 22:24

相关推荐

发表回复

登录后才能评论