1 tempfile介绍

tempfile 模块中常用的函数,如下表所示。

tempfile 模块函数功能描述tempfile.TemporaryFile(mode=‘w+b’, buffering=None, encoding=None, newline=None, suffix=None, prefix=None, dir=None)创建临时文件。该函数返回一个类文件对象,也就是支持文件 I/O。

tempfile.NamedTemporaryFile(mode=‘w+b’, buffering=None, encoding=None, newline=None, suffix=None, prefix=None, dir=None, delete=True)创建临时文件。该函数的功能与上一个函数的功能大致相同,只是它生成的临时文件在文件系统中有文件名。

tempfile.SpooledTemporaryFile(max_size=0, mode=‘w+b’, buffering=None, encoding=None, newline=None, suffix=None, prefix=None, dir=None)创建临时文件。与 TemporaryFile 函数相比,当程序向该临时文件输出数据时,会先输出到内存中,直到超过 max_size 才会真正输出到物理磁盘中。

tempfile.TemporaryDirectory(suffix=None, prefix=None, dir=None)生成临时目录。

tempfile.gettempdir()获取系统的临时目录。

tempfile.gettempdirb()与 gettempdir() 相同,只是该函数返回字节串。

tempfile.gettempprefix()返回用于生成临时文件的前缀名。

tempfile.gettempprefixb()与 gettempprefix() 相同,只是该函数返回字节串。

提示:表中有些函数包含很多参数,但这些参数都具有自己的默认值,因此如果没有特殊要求,可以不对其传参。

2 创建临时文件

2.1 TemporaryFile

该函数返回一个类文件对象,用于临时数据保存(实际上对应磁盘上的一个临时文件)。

def TemporaryFile(mode='w+b', buffering=-1, encoding=None,

newline=None, suffix=None, prefix=None,

dir=None, *, errors=None)

生成的对象可以用作上下文管理器。完成文件对象的上下文或销毁后(文件对象被 close 或者被 del),临时文件将从文件系统中删除。

mode 参数默认值为 w+b,采用二进制模式,可以进行读写

buffering 用于设置缓冲策略。0:关闭缓冲(仅允许在二进制模式下),1:行缓冲(仅在文本模式下可用),>1 的整数:指定块缓冲区的大小(以字节为单位)。如果没有给出 buffering 参数,采用默认缓冲策略

encoding 是用于解码或编码文件的编码的名称

prefix 指定了临时文件名的前缀

suffix 指定了临时文件名的后缀

dir 用于设置临时文件默认的保存路径

返回的类文件对象有一个 file 属性,它指向真正操作的底层的 file 对象

from tempfile import TemporaryFile

temp = TemporaryFile(dir='/home/skx/pra')

print(temp)

print(temp.name)

'''

TemporaryFile类的构造方法,其返回的还是一个文件对象。但这个文件对象特殊的地方在于

1. 对应的文件没有文件名,对除了本程序之外的程序不可见

2. 在被关闭的同时被删除

所以上面的两句打印语句,输出分别是一个文件对象,以及一个(并不是文件名)

'''

# 向临时文件中写入内容

temp.write(b'hello\nworld')

temp.seek(0) # 将文件指针移动到头部,准备读取文件

print(temp.read())

temp.close() # 关闭文件的同时删除文件

# 通过with语句创建临时文件,with会自动关闭临时文件

with TemporaryFile() as fd:

fd.write("我最棒".encode('utf-8'))

fd.seek(0)

print(fd.read().decode('utf-8'))

3

b'hello\nworld'

我最棒

注意:mode 参数默认值为 w+b,写 str 时每次需要转换为 binary 再写入,这样很麻烦,可以指定打开方式为 w+,这样就可以直接进行 str 类型的读写了

读取配置文件放入临时文件

example.ini

[DEFAULT]

ip = 172.0.0.1

port = 22

[bitbucket.org]

user = Atlan

conf_tempfile.py

#coding=utf-8

import configparser

from tempfile import TemporaryFile

conf = configparser.ConfigParser()

conf.read('example.ini')

with TemporaryFile(mode='w+') as fd:

conf.write(fd) # 注意这里的用法

fd.seek(0)

print(fd.read())

2.2 NamedTemporaryFile

此函数执行的操作与 TemporaryFile() 完全相同,但是创建的临时文件有文件名,在文件系统中可以找到,因此可以多个进程同时访问

def NamedTemporaryFile(mode='w+b', buffering=-1, encoding=None,

newline=None, suffix=None, prefix=None,

dir=None, delete=True, *, errors=None)

该函数多了一个 delete 参数,用于指定类文件对象 close 或者被 del 之后,是否也一同删除磁盘上的临时文件(当 delete = True 的时候,行为与 TemporaryFile 一样)。

import os

from tempfile import NamedTemporaryFile

# 指定文件以 "head_" 开头,以"_tail"结尾

temp = NamedTemporaryFile(suffix="_tail", prefix="head_", dir='/home/skx/pra',delete=False)

try:

print('temp:', temp)

print('temp.name:', temp.name)

finally:

temp.close()

# 指定了delete,文件对象 close 或者被 del 之后,磁盘文件不会被删除

print('Exists after close:', os.path.exists(temp.name))

运行结果:

temp:

temp.name: /home/skx/pra/head_0dsw2361_tail

Exists after close: True

指定 delete=False,文件对象 close 或者被 del 之后,不删除磁盘上的临时文件,在指定的目录中可以看到文件如下

2.3 SpooledTemporaryFile

tempfile.SpooledTemporaryFile(max_size=0, mode='w+b', buffering=-1,

encoding=None, newline=None,

suffix=None, prefix=None, dir=None, *, errors=None)

此函数执行的操作与 TemporaryFile() 完全相同,但会将数据缓存在内存中,直到文件大小超过 max_size,或调用文件的 fileno() 方法为止,此时数据会被写入磁盘。

2.4 mkstemp

tempfile.mkstemp(suffix=None, prefix=None, dir=None, text=False)

prefix 指定了临时文件名的前缀

suffix 指定了临时文件名的后缀

dir 用于设置临时文件默认的保存路径

text 指定了是否以文本的形式来操作文件,默认为False,表示以二进制的形式来操作文件。

mkstemp() 返回一个元组,元组中第一个元素是句柄,它是一个系统级句柄,指向一个打开的文件(等同于 os.open() 的返回值),第二元素是该文件的绝对路径。

文件使用完后文件不会自动清除,需要手动清理。

import tempfile

tmp_f = tempfile.mkstemp(dir="/home/skx/pra/")

print(tmp_f)# (3, '/home/skx/pra/tmp58do2j53')--> tmp_f[0] 是句柄,tmp_f[1] 是文件路径

fd = tmp_f[1]

with open(fd, 'w+') as f:

f.write('Hello world')

f.seek(0)

print(f.read())

运行结果

(3, '/home/skx/pra/tmp58do2j53')

Hello world

3 创建临时目录

3.1 TemporaryDirectory

tempfile.TemporaryDirectory(suffix=None, prefix=None, dir=None)

prefix 指定了临时文件名的前缀

suffix 指定了临时文件名的后缀

dir 用于设置临时文件默认的保存路径

此函数会安全地创建一个临时目录。此函数返回的对象可用作上下文管理器。完成上下文或销毁临时目录对象后,新创建的临时目录及其所有内容自动将从文件系统中删除。

也可以调用 cleanup() 方法手动清理目录。

import os

import tempfile

with tempfile.TemporaryDirectory(suffix='_tail', prefix='head_') as dir_name:

print(dir_name)

print(os.path.exists(dir_name))

运行结果

/tmp/head_gtbt2gkw_tail

False

3.2 mkdtemp

def mkdtemp(suffix=None, prefix=None, dir=None)

prefix 指定了临时文件名的前缀

suffix 指定了临时文件名的后缀

dir 用于设置临时文件默认的保存路径

以最安全的方式创建一个临时目录,创建该目录时不会有竞争的情况。该目录只能由创建者读取、写入和搜索。返回新目录的绝对路径名。

用户用完临时目录后需要自行将其删除。

import os

import tempfile

dir_name = tempfile.mkdtemp(suffix='_tail', prefix='head_', dir='/tmp')

print(dir_name)

# 需要手动清理

os.removedirs(dir_name)

运行结果

/tmp/head_kn9uoe1z_tail

原文链接:https://blog.csdn.net/happyjacob/article/details/112385665

python tempfile cleanup_python tempfile 模块---生成临时文件和目录相关推荐

  1. python tempfile cleanup_Python tempfile模块:生成临时文件和临时目录

    Python tempfile模块:生成临时文件和临时目录 tempfile 模块专门用于创建临时文件和临时目录,它既可以在 UNIX 平台上运行良好,也可以在 Windows 平台上运行良好. te ...

  2. python tempfile自动删除_Python tempfile模块生成临时文件和临时目录

    tempfile 模块专门用于创建临时文件和临时目录,它既可以在 UNIX 平台上运行良好,也可以在 Windows 平台上运行良好. tempfile 模块中常用的函数,如表 1 所示. 表 1 t ...

  3. Python 生成临时文件和目录 -tempfile

    请看代码:官方文档 详见 tempfile- 生成临时文件和目录 >>> import tempfile# create a temporary file and write som ...

  4. python生成xml界面,Python如何用dom模块生成XML文

    Python如何用dom模块生成XML文件呢? 主要方法三点: 首先.生成XML节点(node) createElement("node_name") 然后.给节点添加属性值(At ...

  5. python:继承日志模块生成自定义日志

    1 继承日志模块生成自定义日志 from __future__ import absolute_importimport os import sys import time import dateti ...

  6. Linux命令之生成临时文件或目录mktemp

    概述 mktemp 命令可用于生成一个临时文件或目录,并返回其生成的临时文件名. 注:该命令常用于 shell 脚本中创建临时文件. 语法 该命令的语法如下: mktemp [选项] [文件名] 该命 ...

  7. Python:tempfile 模块(临时文件和目录的处理)

    文章目录 一.`tempfile.TemporaryFile` 二.`tempfile.NamedTemporaryFile` 三.`tempfile.mkdtemp` 四.`Predicting N ...

  8. Python学习笔记——os模块【文件、目录方法】

    例子 train_data_path = os.path.join(data_path, 'npy/') 解释:os.path.join(path,name)  连接目录和文件名或目录 ls = os ...

  9. python random库生成伯努利随机数的方法_Python使用random模块生成随机数操作实例详解...

    本文实例讲述了Python使用random模块生成随机数操作.分享给大家供大家参考,具体如下: 今天在用Python编写一个小程序时,要用到随机数,于是就在网上查了一下关于Python生成各种随机数的 ...

最新文章

  1. 【java】兴唐第二十五节课小程序学生卡转账小系统(自己写的异常)
  2. 推荐一款 Flutter Push 推送功能插件
  3. Xamarin 2017.10.9更新
  4. 操作系统Linux环境下动态分区存储管理的内存分别配回收
  5. 推荐算法注意点和DeepFM工程化实现
  6. Python列表综合
  7. Java黑皮书课后题第8章:*8.30(代数:解答线性方程)编写一个方法,解答下面的2*2线性方程组系统
  8. 【Java并发性和多线程】线程安全及不可变性
  9. 解决jodconverter 2.2.1 版本不支持docx、xlsx、pptx 转换成PDF格式异常
  10. 设置JDK环境变量(linux版)
  11. C#基础温习(10):C#实现托盘功能
  12. 【编程软件】keli自定义跳转函数及返回跳转原位置按键(附赠MDK525版本下载地址)
  13. 编程中的脚手架是什么意思?
  14. 银行间市场评论员文章词云绘制效果
  15. 诺基亚狙击华为起诉T-Mobile的背后
  16. beecloud resrful api test(nodejs)
  17. [leetcode] 77. Combinations @ python
  18. 微信整人假红包图片_微信假红包生成器安卓-微信红包图片截图整人交友方法 红包显示一会出现你的交友宣言...
  19. java语言程序设计第三版答案郎波著,太完整了!
  20. springboot增加XSS跨站脚本攻击防护功能

热门文章

  1. SAP云平台里Run index.html和Run as SAP Fiori Launchpad的区别
  2. ABAP Text表的实现原理
  3. One order save debug screenshot
  4. 什么是CRM中间件的1250事件
  5. One order time zone
  6. SAP CRM Fiori应用里取top20的service url的determine逻辑
  7. 如何关闭SAP Fiori的病毒扫描设
  8. java扫雷具有win7_Win7系统自带扫雷游戏打不开的解决方法
  9. 关于python类的继承正确的说法是_2017美团点评的运维岗校招笔试题,测测你会几题?...
  10. python 月活_TikTok用户月活超1亿意味着什么?什么是月活用户?