python tempfile cleanup_python tempfile 模块---生成临时文件和目录
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 模块---生成临时文件和目录相关推荐
- python tempfile cleanup_Python tempfile模块:生成临时文件和临时目录
Python tempfile模块:生成临时文件和临时目录 tempfile 模块专门用于创建临时文件和临时目录,它既可以在 UNIX 平台上运行良好,也可以在 Windows 平台上运行良好. te ...
- python tempfile自动删除_Python tempfile模块生成临时文件和临时目录
tempfile 模块专门用于创建临时文件和临时目录,它既可以在 UNIX 平台上运行良好,也可以在 Windows 平台上运行良好. tempfile 模块中常用的函数,如表 1 所示. 表 1 t ...
- Python 生成临时文件和目录 -tempfile
请看代码:官方文档 详见 tempfile- 生成临时文件和目录 >>> import tempfile# create a temporary file and write som ...
- python生成xml界面,Python如何用dom模块生成XML文
Python如何用dom模块生成XML文件呢? 主要方法三点: 首先.生成XML节点(node) createElement("node_name") 然后.给节点添加属性值(At ...
- python:继承日志模块生成自定义日志
1 继承日志模块生成自定义日志 from __future__ import absolute_importimport os import sys import time import dateti ...
- Linux命令之生成临时文件或目录mktemp
概述 mktemp 命令可用于生成一个临时文件或目录,并返回其生成的临时文件名. 注:该命令常用于 shell 脚本中创建临时文件. 语法 该命令的语法如下: mktemp [选项] [文件名] 该命 ...
- Python:tempfile 模块(临时文件和目录的处理)
文章目录 一.`tempfile.TemporaryFile` 二.`tempfile.NamedTemporaryFile` 三.`tempfile.mkdtemp` 四.`Predicting N ...
- Python学习笔记——os模块【文件、目录方法】
例子 train_data_path = os.path.join(data_path, 'npy/') 解释:os.path.join(path,name) 连接目录和文件名或目录 ls = os ...
- python random库生成伯努利随机数的方法_Python使用random模块生成随机数操作实例详解...
本文实例讲述了Python使用random模块生成随机数操作.分享给大家供大家参考,具体如下: 今天在用Python编写一个小程序时,要用到随机数,于是就在网上查了一下关于Python生成各种随机数的 ...
最新文章
- 【java】兴唐第二十五节课小程序学生卡转账小系统(自己写的异常)
- 推荐一款 Flutter Push 推送功能插件
- Xamarin 2017.10.9更新
- 操作系统Linux环境下动态分区存储管理的内存分别配回收
- 推荐算法注意点和DeepFM工程化实现
- Python列表综合
- Java黑皮书课后题第8章:*8.30(代数:解答线性方程)编写一个方法,解答下面的2*2线性方程组系统
- 【Java并发性和多线程】线程安全及不可变性
- 解决jodconverter 2.2.1 版本不支持docx、xlsx、pptx 转换成PDF格式异常
- 设置JDK环境变量(linux版)
- C#基础温习(10):C#实现托盘功能
- 【编程软件】keli自定义跳转函数及返回跳转原位置按键(附赠MDK525版本下载地址)
- 编程中的脚手架是什么意思?
- 银行间市场评论员文章词云绘制效果
- 诺基亚狙击华为起诉T-Mobile的背后
- beecloud resrful api test(nodejs)
- [leetcode] 77. Combinations @ python
- 微信整人假红包图片_微信假红包生成器安卓-微信红包图片截图整人交友方法 红包显示一会出现你的交友宣言...
- java语言程序设计第三版答案郎波著,太完整了!
- springboot增加XSS跨站脚本攻击防护功能
热门文章
- SAP云平台里Run index.html和Run as SAP Fiori Launchpad的区别
- ABAP Text表的实现原理
- One order save debug screenshot
- 什么是CRM中间件的1250事件
- One order time zone
- SAP CRM Fiori应用里取top20的service url的determine逻辑
- 如何关闭SAP Fiori的病毒扫描设
- java扫雷具有win7_Win7系统自带扫雷游戏打不开的解决方法
- 关于python类的继承正确的说法是_2017美团点评的运维岗校招笔试题,测测你会几题?...
- python 月活_TikTok用户月活超1亿意味着什么?什么是月活用户?