python tempfile 创建临时目录
一、tempfile介绍
该模块创建临时文件和目录。它适用于所有支持的平台。TemporaryFile
,NamedTemporaryFile
,TemporaryDirectory
,和SpooledTemporaryFile
是高级接口,其提供自动清理和可被用作上下文管理器。mkstemp()
并且 mkdtemp()
是需要手动清理的低级功能。
所有用户可调用的函数和构造函数都采用其他参数,这些参数允许直接控制临时文件和目录的位置和名称。此模块使用的文件名包括一串随机字符,允许在共享临时目录中安全地创建这些文件。为了保持向后兼容性,参数顺序有些奇怪; 为清晰起见,建议使用关键字参数。
二、创建临时文件
1、TemporaryFile
该模块定义以下用户可调用项:
tempfile.
TemporaryFile
(mode ='w + b',buffering = None,encoding = None,newline = None,suffix = None,prefix = None,dir = None )-
返回一个类似文件的对象,可以用作临时存储区域。使用与之相同的规则安全地创建文件
mkstemp()
。它将在关闭后立即销毁(包括在对象被垃圾收集时隐式关闭)。在Unix下,文件的目录条目根本不是创建的,或者在创建文件后立即删除。其他平台不支持此功能; 您的代码不应该依赖于使用此函数创建的临时文件,该文件在文件系统中具有或不具有可见名称。生成的对象可以用作上下文管理器。完成文件对象的上下文或销毁后,临时文件将从文件系统中删除。
所述模式参数默认为
'w+b'
使得所创建的文件可以被读取并且没有被关闭写入。使用二进制模式,使其在所有平台上的行为一致,而不考虑存储的数据。 缓冲,编码和换行符被解释为open()
。该目录,prefix和suffix的参数具有相同的含义和缺省值与
mkstemp()
。返回的对象是POSIX平台上的真实文件对象。在其他平台上,它是一个类文件对象,其
file
属性是底层的真实文件对象。os.O_TMPFILE
如果该标志可用且有效,则使用该标志(特定于Linux,需要Linux内核3.11或更高版本)。版本3.5中已更改:
os.O_TMPFILE
现在使用该标志(如果可用)。
示例:
from tempfile import TemporaryFile
'''
TemporaryFile类的构造方法,其返回的还是一个文件对象。但这个文件对象特殊的地方在于
1. 对应的文件没有文件名,对除了本程序之外的程序不可见
2. 在被关闭的同时被删除
'''
temp = TemporaryFile(dir=r'D:\test') # 创建一个临时文件对象(类似文件句柄) temp.write(b'hello world') # 向临时文件中写入内容(bytes类型) # 读取临时文件的内容
temp.seek(0) # 从头读取,和一般文件对象不同,seek方法的执行不能少
print(temp.read()) temp.close() # 关闭文件的同时删除文件
2、NamedTemporaryFile
tempfile.
NamedTemporaryFile
(mode ='w + b',buffering = None,encoding = None,newline = None,suffix = None,prefix = None,dir = None,delete = True )-
NamedTemporaryFile 的运行方式与 TemporaryFile 完全相同。不同之处在于,NamedTemporaryFile 初始化时加上了delete参数,默认值为True。当此参数为True时和TemporaryFile类完全一致。如果是False,那么临时文件对象在被关闭时不会删除。因此可以在下面的代码中通过同样的对象再次打开。可以从
name
返回的类文件对象的属性中检索该名称。
3、SpooledTemporaryFile
tempfile.
SpooledTemporaryFile
(max_size = 0,mode ='w + b',buffering = None,encoding = None,newline = None,suffix = None,prefix = None,dir = None )-
此函数的运行方式与此完全相同
TemporaryFile()
,只是数据在内存中假脱机,直到文件大小超过max_size,或者直到fileno()
调用文件的方法为止,此时内容将写入磁盘,操作继续进行TemporaryFile()
。生成的文件有一个额外的方法,
rollover()
使文件无论其大小如何都会转到磁盘文件。返回的对象是一个类文件对象,其
_file
属性是一个io.BytesIO
或io.StringIO
对象(取决于是否指定了二进制或文本模式)或真正的文件对象,具体取决于是否rollover()
已被调用。类似文件的对象可以在with
语句中使用,就像普通文件一样。在3.3版中更改: truncate方法现在接受一个
size
参数。
4、mktemp
python早期创建临时文件的方法是:
1.首先使用mktemp()
函数生成文件名(包涵文件路径)
2.然后使用此名称创建文件。
3.示例
import tempfile
tmp_path = tempfile.mktemp(dir=r"D:\test") # 指定生成的文件目录:D:\test目录下
print(tmp_path) # D:\test\tmpq44i5ytv ---- tmpq44i5ytv是随机生成的文件名 with open(tmp_path, 'w+') as f: # mktemp只生成路径,并没有生成文件,需手动调用open创建
f.write('Hello world')
# f.flush()
5、mkstemp
tempfile.
mkstemp
(suffix = None,prefix = None,dir = None,text = False )-
mkstemp方法用于创建一个临时文件。该方法仅仅用于创建临时文件,调用tempfile.mkstemp函数后,返回包含两个元素的元组,第一个元素指示操作该临时文件的安全级别,第二个元素指示该临时文件的路径。参数suffix和prefix分别表示临时文件名称的suffix和prefix;dir指定了临时文件所在的目录,如果没有指定目录,将根据系统环境变量TMPDIR, TEMP或者TMP的设置来保存临时文件;参数text指定了是否以文本的形式来操作文件,默认为False,表示以二进制的形式来操作文件。
import tempfile
tmp_f = tempfile.mkstemp(dir=r"D:\test")
print(tmp_f) # (3, 'D:\\test\\tmp98sbordm')-->3:安全级别,D:\\test\\tmp98sbordm:文件所在目录 fd = tmp_f[1] with open(fd, 'w+') as f: # mkstemp生成了文件,但是文件内容为空,需手动open写入数据
f.write('Hello world')
三、创建临时目录
1、TemporaryDirectory
tempfile.
TemporaryDirectory
(suffix=None,prefix=None,dir =None)
此功能使用与之相同的规则安全地创建临时目录mkdtemp()
。生成的对象可以用作上下文管理器。完成上下文或销毁临时目录对象后,将从文件系统中删除新创建的临时目录及其所有内容。
可以从name
返回的对象的属性中检索目录名称。当返回的对象用作上下文管理器时, name
将as
在with
语句中将该子句的目标分配给该子句的目标(如果有)。
可以通过调用该cleanup()
方法显式清除该目录 。
版本3.2中的新功能。
2、mkdtemp
tempfile.
mkdtemp
(suffix=None,prefix=None,dir =None)-
尽可能以最安全的方式创建临时目录。目录的创建中没有竞争条件。该目录只能通过创建用户ID进行读取,写入和搜索。
用户
mkdtemp()
负责在完成后删除临时目录及其内容。该prefix,suffix和DIR参数是一样的
mkstemp()
。mkdtemp()
返回新目录的绝对路径名。在版本3.5中更改:suffix,prefix和目录现在可以以字节为单位提供,以获取字节返回值。在此之前,只允许str。 suffix和prefix现在接受并默认为
None
使用适当的默认值。
3、gettempdir
tempfile.
gettempdir
()-
用于返回保存临时文件的文件夹路径。这定义了此模块中所有函数的dir参数的默认值。
Python搜索标准目录列表以找到调用用户可以创建文件的目录。列表是:
由...命名的目录
TMPDIR
环境变量。由...命名的目录
TEMP
环境变量。由...命名的目录
TMP
环境变量。特定于平台的位置:
在Windows中,目录
C:\TEMP
,C:\TMP
,\TEMP
,并\TMP
按此顺序。在所有其他平台,目录
/tmp
,/var/tmp
以及/usr/tmp
在这个顺序。
作为最后的手段,当前的工作目录。
缓存此搜索的结果,请参阅
tempdir
下面的说明 。
4、gettempdirb
tempfile.
gettempdirb
()-
与
gettempdir()
但相同,返回值以字节为单位。版本3.5中的新功能。
5、gettempprefix
tempfile.
gettempprefix
()-
返回用于创建临时文件的文件名prefix。这不包含目录组件。
6、gettempprefixb
tempfile.
gettempprefixb
()-
与
gettempprefix()
但相同,返回值以字节为单位。版本3.5中的新功能。
该模块使用全局变量来存储用于返回的临时文件的目录名称gettempdir()
。它可以直接设置以覆盖选择过程,但不鼓励这样做。此模块中的所有函数都使用dir参数,该参数可用于指定目录,这是推荐的方法。
7、tempdir
tempfile.
tempdir
-
当设置为其他值时
None
,此变量定义此模块中定义的函数的dir参数的默认值。如果
tempdir
是None
(默认值)任何上述函数的调用,除非gettempprefix()
它按照中描述的算法初始化gettempdir()
。
四、示例
以下是tempfile
模块典型用法的一些示例:
import tempfile # 1.创建一个临时文件并向其中写入一些数据
fp = tempfile.TemporaryFile()
fp.write(b'Hello world!') # 2.从文件中读取数据
fp.seek(0)
fp.read() # b'Hello world!' # 3.关闭文件,它将被删除
fp.close() # 4.使用上下文管理器创建临时文件
with tempfile.TemporaryFile() as fp:
fp.write(b'Hello world!')
fp.seek(0)
fp.read() # b'Hello world!'
# 文件现在已关闭并删除 # 6.使用上下文管理器创建临时目录
with tempfile.TemporaryDirectory() as tmpdirname:
print('created temporary directory', tmpdirname)
# 目录和内容已被删除
python tempfile 创建临时目录的更多相关文章
- VSCode:无法创建临时目录
报错为Could not create temporary directory: 权限被拒绝 解决办法 在VSCode的命令行上输入 sudo chown $USER ~/Library/Caches ...
- Python之文件与目录
file 通常建议使用open()打开文件,file用于类型判断 如果要把数据写到磁盘上,除调用flush()外,还得用sync(),以确保数据从系统缓冲区同步到磁盘.close()总是会调用这两个方 ...
- Python ——tempfile
主要有以下几个函数: tempfile.TemporaryFile 如何你的应用程序需要一个临时文件来存储数据,但不需要同其他程序共享,那么用TemporaryFile函数创建临时文件是最好的选择.其 ...
- 6、pytest -- 临时目录和文件
目录 1. 相关的fixture 1.1. tmp_path 1.2. tmp_path_factory 1.3. tmpdir 1.4. tmpdir_factory 1.5. 区别 2. 默认的基 ...
- Python tempfile (临时文件)
Python tempfile 大量临时数据放在内存中会占用大量资源,可以使用临时文件来进行储存 临时文件不用命名,且使用后会被自动删除 TemporaryFile 使用 TemporaryFile ...
- python 一次创建多级目录
python 一次创建多级目录沙漠骆驼:qq音乐import osos.mkdirs('/home/user/app')
- Python 按当前日期(年、月、日)创建多级目录的方法
先看实际效果,现在时间2018.4.26 使用python脚本按照年月日生成多级目录,创建的目录可以将系统生成的日志文件放入其中,方便查阅,代码如下: #!/usr/bin/env python #c ...
- QTemporaryDir及QTemporaryFile建立临时目录及文件夹(创建一个随机名称的目录或文件,两者均能保证不会覆盖已有文件)
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址:本文标题:QTemporaryDir及QTemporaryFile建立临时目录及文件夹 本文地址: ...
- python操作文件和目录查看、创建、删除、复制
python内置了os模块可以直接调用操作系统提供的接口函数,os.name查询的是操作系统,‘nt’表示windows系统 >>> import os >>> o ...
随机推荐
- Leetcode(871)-最低加油次数
汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处. 沿途有加油站,每个 station[i] 代表一个加油站,它位于出发位置东面 station[i][0] 英里处,并且有 s ...
- 使用 js 实现十大排序算法: 基数排序
使用 js 实现十大排序算法: 基数排序 基数排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- github & markdown & image layout
github & markdown & image layout css & right https://github.com/sindresorhus/log-symbols ...
- Web Components & HTML5 & template & slot
Web Components & HTML5 & template & slot https://developer.mozilla.org/en-US/docs/Web/HT ...
- SVG 场馆图
SVG 场馆图 https://www.infoq.cn/article/1BVg9VDSmqyHv3W3TeNH https://mp.weixin.qq.com/s/aNPAfJIHL14NFtL ...
- Flutter: The getter 'futureDynamicType' was called on null.
> flutter packages pub upgrade
- Java并发包源码学习系列:同步组件CountDownLatch源码解析
目录 CountDownLatch概述 使用案例与基本思路 类图与基本结构 void await() boolean await(long timeout, TimeUnit unit) void c ...
- 发布Jar包到maven中央仓库
什么是maven中央仓库 maven是java世界最流行的构建工具,构建内容囊括了一个java项目的整个生命周期.其中最重要的功能就是依赖管理,maven通过一个类似云的ftp站点统一管理所有java ...
- es命令测试
1.新建索引并赋值 :put/索引名/文档名/id //文档名后面会逐渐取消 相当表 PUT /test1/type1/1{ "nmae":"hb", &quo ...
- 【Notes】现代图形学入门_02
跟着闫令琪老师的课程学习,总结自己学习到的知识点 课程网址GAMES101 B站课程地址GAMES101 课程资料百度网盘[提取码:0000] 光栅化 着色(Shading) 在图形学中,着色的定义可 ...