这是我参与8月更文挑战的第6天,活动详情查看: 8月更文挑战
回顾复习
Python提供许多的文件/目录操作的模块,常见的有7种,我们前面已经学习4种啦
- ?对文件/目录操作的os模块,
- ?对文件路径操作的os.path模块
- ?对多个文件读取数据流操作的fileinput模块
- ?对文件拷贝/移动/压缩/解压缩高级操作的shutil模块
生活小场景思考?
我们在日常使用应用程序时,会在电脑上看到生成一些看不懂文件,那是为啥呀?
原因竟然是这?
- 当应用程序APP运行时,要保存一些临时的信息;
- 临时信息特点:不重要但是又不能没有。
- 临时信息用于:保持日志、临时数据、无关紧要的设置、浏览数据副本等
- 临时信息存储位置:windows下临时文件一般保存在C:/Documents and Settings/User/Local Settings/Temp
因此,Python提供啦一个tempfile模块,用于对临时信息进行操作。
废话不多说,我们本期来学习tempfile模块,let’s go~~?✈️
1. tempfile模块概述
⭐tempfile模块用于创建临时文件和目录,支持Windows和Linux系统使用
-
使用场景:tmpfile模块支持应用程序不需要与其他程序共享临时数据的创建
-
提供4个高级类(自动清除关闭的文件):TemporaryFile类、NameTemporaryFile类、TemporaryDirectory类和SpooledTemporaryFile类
(1)TemporaryFile类:用于最多的调用临时文件提供的标准接口,可用于读写临时文件,并且保证临时文件的隐藏性,默认的文件打开模式是w+b
(2) NamedTemporaryFile类:与Temporaryfile类操作类似,但是对于文件关闭后是否删除delete进行判断,默认是True。
(3) TemporaryDirectory类:会安全地创建一个临时目录。返回的对象可用于上下文管理器使用。
(4) SpooledTemporaryFile类:与Temporaryfile类操作类似,在它基础上增加一个限制写入文件初始的闸值Max_size。当数据没有达到max_size时,会暂存在内存中;只有当数据超过max_size设置的值之后,会把数据写入在文件里保存。默认Max_size为0.
-
也提供需要手动清理函数:mkstemp() 和 mkdtemp() 方法
⚠️注意:
- tempfile模块提供参数可以设置临时文件和临时目录路径和名称
- tempfile模块创建的文件名包括一串随机字符能保证在公共临时目录下会更加安全。
- tempfile.mktemp()此方法在python2.3已经移除了,由mkstemp()来替代
2. tempfile模块相关方法
tempfile模块提供了创建临时文件的方法如下:
方法 | 作用 |
---|---|
☀️ tempfile.TemporaryFile(mode=’w+b’, buffering=None, encoding=None, newline=None, suffix=None, prefix=None, dir=None) | 创建临时文件,支持IO |
☀️ tempfile.NamedTemporaryFile(mode=’w+b’, buffering=None, encoding=None, newline=None, suffix=None, prefix=None, dir=None, delete=True) | 创建临时文件且有文件名,增加delete字段默认True |
☀️ tempfile.SpooledTemporaryFile(max_size=0, mode=’w+b’, buffering=None, encoding=None, newline=None, suffix=None, prefix=None, dir=None) | 创建临时文件。超过max_size才会真正出到磁盘 |
☀️ tempfile.TemporaryDirectory(suffix=None, prefix=None, dir=None) | 生成临时目录 |
tempfile.mkstemp(suffix=None, prefix=None, dir=None, text=False) | 安全地创建临时文件,返回类型为元组形式,使用完成后需要手动删除 |
tempfile.mkdtemp(suffix=None, prefix=None, dir=None) | 安全地创建临时目录,返回新目录的绝对路径,使用完成后需要手动删除 |
tempfile.gettempdir() | 返回放置的临时文件目录的名称 |
tempfile.gettempprefixb() | 返回用于创建临时文件的文件名前缀,它不包含目录部分。 |
? 敲黑板:
- tempfile提供4个高级方法(上述表格标新)可以与上下文管理器with一起使用
- tempfile.mkstemp()默认是以二进制模式打开
- tempfile.mktemp()创建的目录只能由创建者读取、写入和检索
3. 小试牛刀
?TemporaryFile类的构造方法,其返回的还是一个文件对象。两个显著特点如下:
- 对应的文件没有文件名,对除了本程序之外的程序不可见
- 在被关闭的同时被删除(自动删除创建的文件)
?对比使用open()来创建文档后,使用完成需要调用os.remove(file)来删除文件
import tempfile
temp = tempfile.TemporaryFile()
# 打印创建的临时文件对象
print(temp)
# 打印临时文件所处的路径(绝对路径)
print(temp.name)
# 向临时文件中写入内容
temp.write(b'hello\nJuejin')
# 从头读取,和一般文件对象不同,seek方法的执行不能少
temp.seek(0)
print(temp.read())
temp.close() # 关闭文件的同时系统会自动删除文件
复制代码
PS:temporaryfile写入数据默认是二进制模式,所以在写入数据时要转换成对应的格式,否则系统会抛出异常。
总结
本期,我们学习了创建临时文件操作的tempfile模块。在此模块下,提供了4个高级的功能分别是TemporaryFile、NameTemporaryFile、TemporaryDirectory和SpooledTemporaryFile能与上下文件管理器with一起使用,并且使用完成后系统会自动进行删除,释放系统空间。
以上是本期内容,欢迎大佬们评论点赞指正,我们下次见~??????