Python tempfile模块学习笔记(临时文件)


Posted in Python onMay 25, 2014

tempfile.TemporaryFile

如何你的应用程序需要一个临时文件来存储数据,但不需要同其他程序共享,那么用TemporaryFile函数创建临时文件是最好的选择。其他的应用程序是无法找到或打开这个文件的,因为它并没有引用文件系统表。用这个函数创建的临时文件,关闭后会自动删除。

实例一:

import os
import tempfileprint 'Building a file name yourself:'
filename = '/tmp/guess_my_name.%s.txt' % os.getpid()
temp = open(filename, 'w+b')
try:
    print 'temp:', temp
    print 'temp.name:', temp.name
finally:
    temp.close()
    os.remove(filename)     # Clean up the temporary file yourself
print
print 'TemporaryFile:'
temp = tempfile.TemporaryFile()
try:
    print 'temp:', temp
    print 'temp.name:', temp.name
finally:
    temp.close()
# Automatically cleans up the file

这个例子说明了普通创建文件的方法与TemporaryFile()的不同之处,注意:用TemporaryFile()创建的文件没有文件名

输出:

$ python tempfile_TemporaryFile.py

Building a file name yourself:
temp: <open file '/tmp/guess_my_name.14932.txt', mode 'w+b' at 0x1004481e0>
temp.name: /tmp/guess_my_name.14932.txt

TemporaryFile:
temp: <open file '<fdopen>', mode 'w+b' at 0x1004486f0>
temp.name: <fdopen>

 

默认情况下使用w+b权限创建文件,在任何平台中都是如此,并且程序可以对它进行读写。这个例子说明了普通创建文件的方法与TemporaryFile()的不同之处,注意:用TemporaryFile()创建的文件没有文件名

$ python tempfile_TemporaryFile.py
Building a file name yourself:
temp: <open file '/tmp/guess_my_name.14932.txt', mode 'w+b' at 0x1004481e0>
temp.name: /tmp/guess_my_name.14932.txt
TemporaryFile:
temp: <open file '<fdopen>', mode 'w+b' at 0x1004486f0>
temp.name: <fdopen>

默认情况下使用w+b权限创建文件,在任何平台中都是如此,并且程序可以对它进行读写。

实例二:

import os
import tempfiletemp = tempfile.TemporaryFile()
try:
    temp.write('Some data')
    temp.seek(0)
    print temp.read()
finally:
    temp.close()

写入侯,需要使用seek(),为了以后读取数据。

输出:

$ python tempfile_TemporaryFile_binary.py
Some data

如果你想让文件以text模式运行,那么在创建的时候要修改mode为'w+t'。

实例三:

import tempfilef = tempfile.TemporaryFile(mode='w+t')
try:
    f.writelines(['first\n', 'second\n'])
    f.seek(0)
    for line in f:
        print line.rstrip()
finally:
    f.close()

输出:
$ python tempfile_TemporaryFile_text.py
first
second

tempfile.NamedTemporaryFile

如果临时文件会被多个进程或主机使用,那么建立一个有名字的文件是最简单的方法。这就是NamedTemporaryFile要做的,可以使用name属性访问它的名字

import os
import tempfiletemp = tempfile.NamedTemporaryFile()
try:
    print 'temp:', temp
    print 'temp.name:', temp.name
finally:
    # Automatically cleans up the file
    temp.close()
print 'Exists after close:', os.path.exists(temp.name)

尽管文件带有名字,但它仍然会在close后自动删除

输出:

$ python tempfile_NamedTemporaryFile.py
temp: <open file '<fdopen>', mode 'w+b' at 0x1004481e0>
temp.name: /var/folders/9R/9R1t+tR02Raxzk+F71Q50U+++Uw/-Tmp-/tmp0zHZvX
Exists after close: False

tempfile.mkdtemp

创建临时目录,这个不多说,直接看例子:

import os
import tempfiledirectory_name = tempfile.mkdtemp()
print directory_name
# Clean up the directory yourself
os.removedirs(directory_name)

输出
$ python tempfile_mkdtemp.py
/var/folders/9R/9R1t+tR02Raxzk+F71Q50U+++Uw/-Tmp-/tmpB1CR8M

注意:目录需要手动删除。

Predicting Names

用3个参数来控制文件名,名字产生公式:dir + prefix + random + suffix

实例:

import tempfiletemp = tempfile.NamedTemporaryFile(suffix='_suffix', 
                                   prefix='prefix_', 
                                   dir='/tmp',
                                   )
try:
    print 'temp:', temp
    print 'temp.name:', temp.name
finally:
    temp.close()

输出:

$ python tempfile_NamedTemporaryFile_args.py

temp: <open file '<fdopen>', mode 'w+b' at 0x1004481e0>
temp.name: /tmp/prefix_UyCzjc_suffix

tempfile.mkstemp([suffix=''[, prefix='tmp'[, dir=None[, text=False]]]])

    mkstemp方法用于创建一个临时文件。该方法仅仅用于创建临时文件,调用tempfile.mkstemp函数后,返回包含两个元素的元组,第一个元素指示操作该临时文件的安全级别,第二个元素指示该临时文件的路径。参数suffix和prefix分别表示临时文件名称的后缀和前缀;dir指定了临时文件所在的目录,如果没有指定目录,将根据系统环境变量TMPDIR, TEMP或者TMP的设置来保存临时文件;参数text指定了是否以文本的形式来操作文件,默认为False,表示以二进制的形式来操作文件。

tempfile.mktemp([suffix=''[, prefix='tmp'[, dir=None]]])

    mktemp用于返回一个临时文件的路径,但并不创建该临时文件。

tempfile.tempdir

    该属性用于指定创建的临时文件(夹)所在的默认文件夹。如果没有设置该属性或者将其设为None,Python将返回以下环境变量TMPDIR, TEMP, TEMP指定的目录,如果没有定义这些环境变量,临时文件将被创建在当前工作目录。

tempfile.gettempdir()

    gettempdir()则用于返回保存临时文件的文件夹路径。

 

Python 相关文章推荐
python创建关联数组(字典)的方法
May 04 Python
利用python爬取散文网的文章实例教程
Jun 18 Python
用Pygal绘制直方图代码示例
Dec 07 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
Jan 02 Python
python 实现从高分辨图像上抠取图像块
Jan 02 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
Feb 03 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
May 27 Python
浅谈Pycharm的项目文件名是红色的原因及解决方式
Jun 01 Python
python 基于opencv操作摄像头
Dec 24 Python
Matplotlib中rcParams使用方法
Jan 05 Python
使用Python+Appuim 清理微信的方法
Jan 26 Python
详解使用scrapy进行模拟登陆三种方式
Feb 21 Python
Python logging模块学习笔记
May 24 #Python
Python学习笔记之常用函数及说明
May 23 #Python
从零学python系列之教你如何根据图片生成字符画
May 23 #Python
从零学python系列之从文件读取和保存数据
May 23 #Python
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
May 23 #Python
从零学python系列之新版本导入httplib模块报ImportError解决方案
May 23 #Python
从零学python系列之数据处理编程实例(二)
May 22 #Python
You might like
thinkphp的URL路由规则与配置实例
2014/11/26 PHP
thinkPHP5.0框架模块设计详解
2017/03/18 PHP
PHP获取文本框、密码域、按钮的值实例代码
2017/04/19 PHP
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(下:动画篇)
2010/03/24 Javascript
jQuery焦点图切换特效代码分享
2015/09/15 Javascript
jquery插件jquery.confirm弹出确认消息
2015/12/22 Javascript
JSP基于Bootstrap分页显示实例解析
2016/06/12 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
微信小程序 常见问题总结(4058,40013)及解决办法
2017/01/11 Javascript
vue调用高德地图实例代码
2017/04/28 Javascript
深入解析nodejs HTTP服务
2017/07/25 NodeJs
vue改变对象或数组时的刷新机制的方法总结
2019/04/24 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
微信小程序保持session会话的方法
2020/03/20 Javascript
Python time模块详解(常用函数实例讲解,非常好)
2014/04/24 Python
pandas计算最大连续间隔的方法
2019/07/04 Python
Python实现直播推流效果
2019/11/26 Python
Python实现动态循环输出文字功能
2020/05/07 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
Clarks其乐鞋荷兰官网:Clarks荷兰
2019/07/05 全球购物
李维斯法国官网:Levi’s法国
2019/07/13 全球购物
荷兰家电购物网站:Expert.nl
2020/01/18 全球购物
环境科学专业研究生求职信
2013/10/02 职场文书
师范大学音乐表演专业求职信
2013/10/23 职场文书
高一地理教学反思
2014/01/18 职场文书
四川成都导游欢迎词
2014/01/18 职场文书
高中打架检讨书
2014/02/13 职场文书
乡镇食品安全责任书
2014/07/28 职场文书
班组拓展活动方案
2014/08/14 职场文书
乡镇党委书记个人整改措施
2014/09/15 职场文书
2014年幼儿园后勤工作总结
2014/11/10 职场文书
小学班主任自我评价
2015/03/11 职场文书
redis 限制内存使用大小的实现
2021/05/08 Redis
Java实现斗地主之洗牌发牌
2021/06/14 Java/Android
MySQL学习之基础操作总结
2022/03/19 MySQL
JavaScript实现外溢动态爱心的效果的示例代码
2022/03/21 Javascript