tempfile:临时文件系统对象
介绍
想要安全的创建名字唯一的临时文件,以防止被试图破坏应用或窃取数据的人猜出,这很有难度。tempfile模块提供了多个函数来安全创建临时文件系统资源。TemporaryFile函数打开并返回一个未命名的文件,NamedTemporaryFile打开并返回命名文件,SpooledTemporaryFile在将文件写入磁盘之前会先将其保存在内存中,TemporaryDirectory是一个上下文管理器,上下文关闭时会删除这个目录,我们下面来一一介绍
临时文件
import tempfile
'''
如果应用需要临时文件来存储数据,而不需要与其他程序共享这些文件,则应当使用TemporaryFile函数来创建文件。
这个函数会创建一个文件,而且如果平台支持,它会立即断开这个新文件的链接。
这样一来,其他程序就不可能找到或者打开这个文件,因为文件系统表中根本没有这个文件的引用。
对于TemporaryFile函数创建的文件,不论通过调用close函数,还是结合使用上下文管理器API、with语句,关闭文件时都会自动删除这个临时文件
'''
# mode:默认是w+b,二进制形式。这里使用w+,可读可写
with tempfile.TemporaryFile(mode="w+", encoding="utf-8") as tmp:
print(tmp) # <tempfile._TemporaryFileWrapper object at 0x0000000002372A20>
# 随机生成的名字,但是我们是不需要指定名字的
print(tmp.name) # C:\Users\satori\AppData\Local\Temp\tmpouzkbg3b
print(tmp.mode) # w+
with tempfile.TemporaryFile(mode="w+", encoding="utf-8") as tmp:
tmp.write("这是一个临时文件,里面存储了内容")
# 注意文件写完之后,指针移到了末尾,要想读取的话,需要将指针移到行首
tmp.seek(0)
print(tmp.read()) # 这是一个临时文件,里面存储了内容
命名文件
import tempfile
import pathlib
'''
有些情况下,可能非常需要一个命名的临时文件。对于跨多个进程甚至主机的应用来说,为文件命名是在应用的不同部分之间传递文件的最简单的办法
NamedTemporaryFile函数会创建一个文件,但不会断开它的链接,所以会保留它的文件名(用name属性访问)
但是注意在Windows上NamedTemporaryFile和TemporaryFile是一样的
if _os.name != 'posix' or _os.sys.platform == 'cygwin':
# On non-POSIX and Cygwin systems, assume that we cannot unlink a file
# while it is open.
TemporaryFile = NamedTemporaryFile
'''
with tempfile.NamedTemporaryFile() as tmp:
print(tmp.name) # C:\Users\EDZ\AppData\Local\Temp\tmp3gg7iiir
f = pathlib.Path(tmp.name)
print(f.exists()) # True
# 句柄关闭后,文件也将被删除
print(f.exists()) # False
# 所以在Windows上,NamedTemporaryFile和TemporaryFile是没有差别的
假脱机文件
import tempfile
'''
如果临时文件中包含的数据相对较少,则使用SpooledTemporaryFile函数可能更高效,因为它使用一个io.BytesIO或io.StringIO缓冲区在内存中保存内容,直到数据达到一个阈值大小。
当数据量超过这个阈值时,数据将滚动并写入磁盘,然后用常规的TemporaryFile替换这个缓冲区
'''
with tempfile.SpooledTemporaryFile(max_size=40, mode="w+", encoding="utf-8") as f:
for i in range(4):
f.write("这一行会被反复不断地写哦")
print(f._rolled, f._file)
'''
False <_io.StringIO object at 0x00000000021E90D8>
False <_io.StringIO object at 0x00000000021E90D8>
False <_io.StringIO object at 0x00000000021E90D8>
True <tempfile._TemporaryFileWrapper object at 0x0000000002972BA8>
'''
# 如果要显示地将缓冲区里面的数据写入磁盘,可以调用rollover或者fileno函数
临时目录
需要多个临时文件时,可能更方便的做法是用TemporaryDirectory创建一个临时目录,并打开目录中的所有文件,但是不常用
临时文件位置
import tempfile
'''
在创建临时文件,可以指定dir,即临时文件的生成路径。如果没有指定dir的话,那么临时文件的存储路径会根据当前平台的不同而不同。
tempfile模块包含两个函数,可以用来查询运行时使用的设置
'''
# 返回包含所有临时文件的默认目录
print(tempfile.gettempdir()) # C:\Users\satori\AppData\Local\Temp
# 返回新文件和目录名的字符串前缀
print(tempfile.gettempprefix()) # tmp
tempfile:临时文件系统对象的更多相关文章
- MFC永久窗口对象与临时窗口对象
这篇讲得很清楚,就转过来了,原文如下: 因项目需要,最近在学习MFC,下午在一篇教程中提到了临时窗口.永久窗口,作者让读者自行查阅MSDN,了解临时窗口与永久窗口的概念,出于好奇,出于方便,直接百度一 ...
- 理解JavaScript的临时包装对象
Javascript语言中的对象和基础类型string.number.boolean都可以使用"."符号访问属性和方法,但是本质上只有对象才可以使用".",那么 ...
- Node.js_express_临时会话对象 session
临时会话对象 session 也是用来 解决 http 无状态协议的问题(无法区分多次请求是否发送自同一客户端) npm install express-session npm install con ...
- 使用SQL联合查询来构建临时vo对象的应用
联合查询: 表1: team球队表 表2:schedule 赛程表 需要数据: 球队名称.主队ID.主队名称.客队ID.客队名称.胜负情况 方法1. Object数组取出列和数值 import jav ...
- tmpfs临时文件系统,是一种基于内存的文件系统
在Linux系统内存中的虚拟磁盘映射,可以理解为使用物理内存当做磁盘,利用这种文件系统,可以有效提高在高并发场景下的磁盘读写,但是重启后数据会丢失. 1.查看tmpfs路径 (系统默认开启,大小约为物 ...
- 《Python标准库》 目录
目录 译者序序前言第1章 文本1.1 string—文本常量和模板1.1.1 函数1.1.2 模板1.1.3 高级模板1.2 textwrap—格式化文本段落1.2.1 示例数据1.2.2 填充段落1 ...
- Python:标准库(包含下载地址及书本目录)
下载地址 英文版(文字版) 官方文档 The Python Standard Library <Python标准库>一书的目录 <python标准库> 译者序 序 前言 第1章 ...
- 7.Python3标准库--文件系统
''' Python的标准库中包含大量工具,可以处理文件系统中的文件,构造和解析文件名,还可以检查文件内容. 处理文件的第一步是要确定处理的文件的名字.Python将文件名表示为简单的字符串,另外还提 ...
- Python3标准库使用样例
原:https://doughellmann.com/blog/the-python-3-standard-library-by-example/the-python-3-standard-libra ...
随机推荐
- ORA-03114: not connected to ORACLE
PlSql Developer出现这个问题的时候,只要重新连接一些数据库就行了!
- MSMQ菜鸟教程
一 .MSMQ概述 MSMQ全称MicroSoft Message Queue,微软消息队列,是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于 ...
- Jenkins+gitlab+maven持续集成
https://blog.csdn.net/tq08g2z/article/details/79718425 https://www.jianshu.com/p/3507d8b2ac87 报错用下面解 ...
- 《精通并发与Netty》学习笔记(06 - Apache Thrift使用简介)
一.概述 Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.Thrift是由Facebook开发的,并在2008年捐给了Apache基金会,成为 ...
- 用Python给你的代码上个进度条吧 | 【代码也要面子的】
微信公众号:AI算法与图像处理如果你觉得对你有帮助,欢迎关注.转发以及点赞哦-( ̄▽ ̄-)~ 前言 最近在跑一些代码的时候,很烦...因为有时候不知道这段程序什么时候能执行完,现在执行哪里了,如果报错 ...
- 告诉你:DOS系统实例手册系列专辑连载中
DOS系统实例手册系列专辑连载中 内容提要:
- vc++中播放声音
http://www.cnblogs.com/xuemaxiongfeng/articles/2462560.html http://bbs.csdn.net/topics/390729457 htt ...
- 【Matlab开发】函数bsxfun的使用
[Matlab开发]函数bsxfun的使用 标签:[Matlab开发] 版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/lg1259156776/. 说明:当我们 ...
- OpenCV.CV_FOURCC
1.c++ - how to use CV_CAP_PROP_FOURCC_ - Stack Overflow.html(https://stackoverflow.com/questions/223 ...
- NET中的规范标准注释-- XML注释标签讲解
一.摘要 .Net允许开发人员在源代码中插入XML注释,这在多人协作开发的时候显得特别有用. C#解析器可以把代码文件中的这些XML标记提取出来,并作进一步的处理为外部文档. 这篇文章将展示如何使用这 ...