目录

  • 前言
  • 创建临时文件(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临时文件系统对象相关推荐

  1. python requests库 response_Pytest 如何模拟 requests库中的Response对象?

    请问如何在 Pytest 框架中模拟requests库中的Response对象? 涉及到的主体代码如下: def get_address(phone): url = 'http://www.ip138 ...

  2. pythonurllib库获取yahoo财经数据_Yahoo! Finance财经数据PYTHON临时读取方法

    本篇文章转自简书:http://www.jianshu.com/p/85d563d326a9 这段时间在看量化策略,找到了一个比较不错的开源项目,但是yahoo金融的数据源一直没有找到,在网上找到了这 ...

  3. 基础必备 | Python处理文件系统的10种方法

    作者 | Jeff Hale 译者 | 风车云马:责编 | Jane,Rachel 出品 | Python大本营(ID:pythonnews) [导读]在编写一些Python程序的时候,我们常常需要与 ...

  4. 每日一课 | Python处理文件系统的10种方法

    作者 | Jeff Hale 译者 | 风车云马 责编 | Jane,Rachel 出品 | Python大本营(ID:pythonnews) 今日知识点 如何运用Python处理文件系统 前言 在编 ...

  5. 可爱的python测试开发库(python测试开发工具库汇总)

    2019独角兽企业重金招聘Python工程师标准>>> 欢迎转载,转载请注明来源: github地址 谢谢点赞 本文地址 Python测试开发库 参考资料 https://githu ...

  6. python 入门题库————python语句和基础数理

    python 入门题库 python 题库 Python使用符号_______表示注释 Python不支持的数据类型有 查看python版本的命令是 在Python中,print(type(16/4) ...

  7. 九 Python 类与对象详解,这是软件工程师的分水岭

    目录 1 为什么要面向对象编程 2 核心思想 3 初次体验 4 初始化方法 5 类专用的方法 6 继承(有点像生物的基因传递) 7 灵活的Python,属性自由 8 一切皆是对象 9 OOP的设计方法 ...

  8. python做bi系统_如何使用Python创建可视化对象

    早前,Power BI就已经支持使用Python创建可视化对象了,当你遇到自定义程度较高的可视化对象时,Python就大大的派上了用场:那么我们如何使用呢?接下来小悦就为各位伙伴们介绍一下吧~ 首先, ...

  9. python基础代码库-Python基础数据处理库-NumPy

    最近更新:2017-07-19 NumPy是Python做数据处理的底层库,是高性能科学计算和数据分析的基础,比如著名的Python机器学习库SKlearn就需要NumPy的支持.掌握NumPy的基础 ...

  10. zg手册 之 python2.7.7源码分析(1)-- python中的对象

    为什么80%的码农都做不了架构师?>>>    源代码主要目录结构 Demo: python 的示例程序 Doc: 文档 Grammar: 用BNF的语法定义了Python的全部语法 ...

最新文章

  1. 缓存穿透、并发和失效的解决方案
  2. 开源 | 蚂蚁金服分布式中间件开源第二弹:丰富微服务架构体系
  3. Tomcat如何支持带中文的url?
  4. 读书-算法《程序设计导引及在线实践》-简单计算题5:装箱问题
  5. maya的颤动怎么做_必看!新手学习MAYA的几个建议
  6. java6 已安装更高版本_Java 10及更高版本的思考
  7. Docker 方式安装部署 rocketMQ 、部署 图形化界面控制台、rocketMQ 控制台
  8. ‘分享到’侧边栏制作
  9. hibernate一对一关系实现
  10. 【转载】8天学通MongoDB——第八天 驱动实践
  11. pgpool-II3.1 的内存泄漏(五)
  12. js函数、事件、补充知识
  13. bzoj 相似回文串 3350 3103 弦图染色+manacher
  14. 索引的作用?和它的优点缺点是什么?
  15. between and 用法
  16. 加拿大留学后移民成功的制胜法宝-PGWP毕业后工签
  17. 从2012 飞到 2013 —— 梦想依旧
  18. 奇瑞鲍思语:奇瑞新能源产品线将更加丰富
  19. 北京社保医院选择办法-附A类医保定点医院名单
  20. scribd.com文档下载

热门文章

  1. 农场花园种花偷花前后端完整项目
  2. DNA 测序技术的发展:第三代测序法
  3. STM32中的DMA控制器的使用
  4. Type-C PD充电器诱骗取电5V9V12V15V20V,XSP06+锂电池(筋膜枪)充电
  5. 紫微斗数诸星分级及分类
  6. win7系统提示此windows副本不是正版怎么办?
  7. 计算机程序班搞笑口号,16字高一班级搞笑口号.docx
  8. 计算机考研人工智能方向,2022考研计算机学科研究方向:人工智能
  9. 基于51单片机的火灾报警系统仿真
  10. django如何连接Mysql中已有的数据库