tempfile库:Python临时文件系统对象
目录
- 前言
- 创建临时文件(TemporaryFile)
- 命名文件
- 临时目录(TemporaryDirectory)
- 假脱机文件
- 预测名(NamedTemporaryFile)
- gettempdir()与gettempprefix()
前言
在实际的项目处理中,往往我们并不需要创建文件,仅仅用于中转而已。这个时候在系统中频繁的创建中转文件,删除中转文件,不仅浪费系统的资源,而且容易被破坏或者篡改,这个时候用临时文件反而更好。
而Python给我们提供了临时文件操作库:tempfile。本篇将详细介绍临时文件的应用与处理。
创建临时文件(TemporaryFile)
一般来说,我们通过tempfile.TemporaryFile()函数创建临时文件,具体的代码如下所示:
import tempfilewith tempfile.TemporaryFile(mode='w+t') as temp:temp.write("My name is Li Yuanjing")temp.seek(0)print(temp.read())print(temp.name)
运行之后,效果如下:
其中,mode表示以什么方式创建并打开临时文件,这里w+表示可以读写文件,t是以文本模式打开文件。默认写完内容后,文件句柄在末尾,要重新读取文件,需要使用seek回转重定位。
命名文件
当然,我们创建临时文件是需要使用的,也就是在程序中,我们需要给它一个名字,方便我们进行操作。我们将上面代码变更一下:
import tempfile
import pathlibwith tempfile.TemporaryFile(mode='w+t') as temp:temp.write("My name is Li Yuanjing")temp.seek(0)print(temp.read())f = pathlib.Path(temp.name)
print(f.name)
f.exists()
这里,我们用f变量标记了文件,后面操作的时候,可以使用f进行操作。当我们调用f.exists()函数时,默认临时文件会被删除。
临时目录(TemporaryDirectory)
在实际的项目中,我们可能并不仅仅只是创建一个临时文件,有时候也会创建一批量的临时文件,比如上传文件时。这个时候,我们就需要创建一个临时目录,在临时目录中创建文件进行操作。操作完成之后,只要关闭临时目录,就可以批量的关闭临时文件,比单个临时文件要方便许多。
下面,我们就来创建临时的目录,代码如下:
import tempfile
import pathlibwith tempfile.TemporaryDirectory() as temp:f = pathlib.Path(temp)print(f)a_file = f / 'a.txt'a_file.write_text("111111111111")b_file = f / 'b.txt'b_file.write_text("222222222222")c_file = f / 'c.txt'c_file.write_text("333333333333")print(a_file.read_text())print(b_file.read_text())print(c_file.read_text())
f.exists()
运行之后,效果如下:
假脱机文件
如果我们处理的临时文件的数据较少,其实使用SpooledTemporaryFile可能更高效,因为它使用一个io.BytesIO或io.StringIO缓冲区在内存中保存内容,直到数据超过一定的大小,才写入磁盘,然后用TemporaryFile替代缓冲区。
具体使用方式如下:
import tempfilewith tempfile.SpooledTemporaryFile(max_size=1000, mode='w+t', encoding='utf-8') as temp:print(temp)temp.write('15648497987987987')temp.seek(0)print(temp.read())
运行之后,效果如下:
这里的max_size就是决定文件小于这个值写入缓冲区,大于这个值写入TemporaryFile临时文件。
当然,我们可以强制将缓冲区写入临时文件,可以调用rollover()或fileno()函数。具体代码如下所示:
import tempfilewith tempfile.SpooledTemporaryFile(max_size=1000, mode='w+t', encoding='utf-8') as temp:print(temp)temp.write('15648497987987987')temp.seek(0)temp.rollover()print(temp.read())
如上面代码所示,加一句temp.rollover()就行。
预测名(NamedTemporaryFile)
从上面的代码,我们可以看到,临时文件单独创建的方式,文件名是随机生成的,并不是由程序员指定的,但有时候还需要在名字中包含一些可预测的部分,以便查找和检查文件来进行调用。
这个时候,指定文件名往往更好。我们指定文件名规律用NamedTemporaryFile()函数,代码如下:
import tempfile
import pathlibtmp_file = tempfile.NamedTemporaryFile(prefix='image_', suffix='_png')
print(tmp_file.name)
运行之后,效果如下:
可以看出来,我们的文件名等于:prefix+random+suffix。当然,其实该函数还有一个dir参数,可以指定目录。完整的文件名等于:dir+prefix+random+suffix。
gettempdir()与gettempprefix()
在创建临时文件的时候,如果我们没有指定dir,那么该临时文件的路径会跟随平台和设置变化,也就是不确定的位置。这个时候,我们可能需要获取文件的路径以及其他参数,通过gettempdir()与gettempprefix()可以做到,具体代码如下:
import tempfileprint(tempfile.gettempdir())
print(tempfile.gettempdirb())
print(tempfile.gettempprefix())
print(tempfile.gettempprefixb())
运行之后,效果如下:
gettempdir:返回包含所有临时文件的默认目录
gettempprefix:返回新文件和目录名的字符串前缀。
而这个2个方法还有一个后缀b的方法,用于返回bytes类型的字符串对象。当然如果你想自己设置临时目录,并不跟随系统,可以直接使用tempfile.tempdir进行设置。
import tempfiletempfile.tempdir=r'd:\temp'
print(tempfile.gettempdir())
运行之后,效果如下:
tempfile库:Python临时文件系统对象相关推荐
- python requests库 response_Pytest 如何模拟 requests库中的Response对象?
请问如何在 Pytest 框架中模拟requests库中的Response对象? 涉及到的主体代码如下: def get_address(phone): url = 'http://www.ip138 ...
- pythonurllib库获取yahoo财经数据_Yahoo! Finance财经数据PYTHON临时读取方法
本篇文章转自简书:http://www.jianshu.com/p/85d563d326a9 这段时间在看量化策略,找到了一个比较不错的开源项目,但是yahoo金融的数据源一直没有找到,在网上找到了这 ...
- 基础必备 | Python处理文件系统的10种方法
作者 | Jeff Hale 译者 | 风车云马:责编 | Jane,Rachel 出品 | Python大本营(ID:pythonnews) [导读]在编写一些Python程序的时候,我们常常需要与 ...
- 每日一课 | Python处理文件系统的10种方法
作者 | Jeff Hale 译者 | 风车云马 责编 | Jane,Rachel 出品 | Python大本营(ID:pythonnews) 今日知识点 如何运用Python处理文件系统 前言 在编 ...
- 可爱的python测试开发库(python测试开发工具库汇总)
2019独角兽企业重金招聘Python工程师标准>>> 欢迎转载,转载请注明来源: github地址 谢谢点赞 本文地址 Python测试开发库 参考资料 https://githu ...
- python 入门题库————python语句和基础数理
python 入门题库 python 题库 Python使用符号_______表示注释 Python不支持的数据类型有 查看python版本的命令是 在Python中,print(type(16/4) ...
- 九 Python 类与对象详解,这是软件工程师的分水岭
目录 1 为什么要面向对象编程 2 核心思想 3 初次体验 4 初始化方法 5 类专用的方法 6 继承(有点像生物的基因传递) 7 灵活的Python,属性自由 8 一切皆是对象 9 OOP的设计方法 ...
- python做bi系统_如何使用Python创建可视化对象
早前,Power BI就已经支持使用Python创建可视化对象了,当你遇到自定义程度较高的可视化对象时,Python就大大的派上了用场:那么我们如何使用呢?接下来小悦就为各位伙伴们介绍一下吧~ 首先, ...
- python基础代码库-Python基础数据处理库-NumPy
最近更新:2017-07-19 NumPy是Python做数据处理的底层库,是高性能科学计算和数据分析的基础,比如著名的Python机器学习库SKlearn就需要NumPy的支持.掌握NumPy的基础 ...
- zg手册 之 python2.7.7源码分析(1)-- python中的对象
为什么80%的码农都做不了架构师?>>> 源代码主要目录结构 Demo: python 的示例程序 Doc: 文档 Grammar: 用BNF的语法定义了Python的全部语法 ...
最新文章
- 缓存穿透、并发和失效的解决方案
- 开源 | 蚂蚁金服分布式中间件开源第二弹:丰富微服务架构体系
- Tomcat如何支持带中文的url?
- 读书-算法《程序设计导引及在线实践》-简单计算题5:装箱问题
- maya的颤动怎么做_必看!新手学习MAYA的几个建议
- java6 已安装更高版本_Java 10及更高版本的思考
- Docker 方式安装部署 rocketMQ 、部署 图形化界面控制台、rocketMQ 控制台
- ‘分享到’侧边栏制作
- hibernate一对一关系实现
- 【转载】8天学通MongoDB——第八天 驱动实践
- pgpool-II3.1 的内存泄漏(五)
- js函数、事件、补充知识
- bzoj 相似回文串 3350 3103 弦图染色+manacher
- 索引的作用?和它的优点缺点是什么?
- between and 用法
- 加拿大留学后移民成功的制胜法宝-PGWP毕业后工签
- 从2012 飞到 2013 —— 梦想依旧
- 奇瑞鲍思语:奇瑞新能源产品线将更加丰富
- 北京社保医院选择办法-附A类医保定点医院名单
- scribd.com文档下载