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 ...
随机推荐
- 在DELPHI中用TreeView控件从数据库中动态装载信息
1.PInfo表结构ID VARCHAR(50)FullName VARCHAR(50)ParentID VARCHAR(50) 2.Unit文件unit Info; interface uses ...
- 使用 bash 脚本把 GCE 的数据备份到 GCS
目录 一.Google Cloud Storge 介绍 1.1.四种存储类别的比较 1.2.需求 1.3.给虚拟机添加授权认证 二.备份操作 2.1 创建存储分区 2.2 上传对象到存储分区 2.3 ...
- sql注入02
第一关:基于错误的get单引号字符型注入 第二关:基于错误的get整形注入 第三关:基于错误的get单引号变形字符型注入 第四关:基础错误的双引号字符型注入 第五关: 第六关 第七关:导出文件get字 ...
- 【FFMPEG】不要试图用msvc来编译ffmpeg
原文:http://blog.csdn.net/hn756si/article/details/41147497 出于学习目的,想建一个vs2010工程来编译ffmpeg(http://www.ffm ...
- AndroidMainfest详解
基于TV settings和SettingsProvider Android启动模式对activity行为的影响 AndroidManifest.xml文件详解 Manifest文件中,applica ...
- MySQL中的日期和时间:使用和说明,以及常用函数
1.首先需要注意: 1.1 MySQL中把日期和时间是分开的. 以字符串2007-12-31 00:59:59为例: 日期部分:2007-12-31.这部分也可以叫做一个日期表达式. 时间部分:00: ...
- Guava源码阅读-base-Charsets
package com.google.common.base; 今天在找base包下的源码阅读时,看到了Charsets,肯定是定义字符集的类,本来就想简单的看一下.(部分内容摘抄自:http://b ...
- luogu P1115 最大子段和 (dp)
链接: https://www.luogu.org/problemnew/show/P1115 题面: 题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 第一 ...
- js轮播图和bootstrap中的轮播图
js中的轮播图案例: <!DOCTYPE html><html lang="en"> <head> <meta charset=" ...
- linux命令(ubuntu18)记录...
1.解压.zip文件unzip unzip studentCRUD-master.zip 2.读写权限chmod指令 r表是读 (Read) .w表示写 (Write) .x ...