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 元组(Tuple)操作详解
Mar 11 Python
Python把csv数据写入list和字典类型的变量脚本方法
Jun 15 Python
Selenium的使用详解
Oct 19 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
Apr 16 Python
PyQt5笔记之弹出窗口大全
Jun 20 Python
Django 框架模型操作入门教程
Nov 05 Python
Python实现word2Vec model过程解析
Dec 16 Python
keras得到每层的系数方式
Jun 15 Python
基于Python下载网络图片方法汇总代码实例
Jun 24 Python
Python抓包并解析json爬虫的完整实例代码
Nov 03 Python
python实现自动清理文件夹旧文件
May 10 Python
python如何利用cv2模块读取显示保存图片
Jun 04 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
php实现斐波那契数列的简单写法
2014/07/19 PHP
php出现web系统多域名登录失败的解决方法
2014/09/30 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
2020/04/06 PHP
网页前台通过js非法字符过滤代码(骂人的话等等)
2010/05/26 Javascript
JQuery动态创建DOM、表单元素的实现代码
2011/08/09 Javascript
javascript 事件处理程序介绍
2012/06/27 Javascript
window.print打印指定div指定网页指定区域的方法
2014/08/04 Javascript
js基于cookie方式记住返回页面用法示例
2016/05/27 Javascript
Angular.js 实现数字转换汉字实例代码
2016/07/14 Javascript
web.js.字符串与正则表达式操作
2017/05/13 Javascript
JS实现留言板功能
2017/06/17 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
2017/09/19 Javascript
jQuery实现的页面遮罩层功能示例【测试可用】
2017/10/14 jQuery
layui对工具条进行选择性的显示方法
2019/09/19 Javascript
详解Vue3中对VDOM的改进
2020/04/23 Javascript
React服务端渲染原理解析与实践
2021/03/04 Javascript
Django中login_required装饰器的深入介绍
2017/11/24 Python
WxPython建立批量录入框窗口
2019/02/27 Python
Python3模拟curl发送post请求操作示例
2019/05/03 Python
Python类中的魔法方法之 __slots__原理解析
2019/08/26 Python
python利用JMeter测试Tornado的多线程
2020/01/12 Python
如何用Python提取10000份log中的产品信息
2021/01/14 Python
CSS3五个技巧给你的网站带来出色的效果
2009/04/02 HTML / CSS
澳大利亚家庭花园和DIY工具网店:VidaXL
2019/05/03 全球购物
维德科技C#面试题笔试题
2015/12/09 面试题
硕士研究生自我鉴定范文
2013/12/27 职场文书
2014年党员创先争优承诺书
2014/05/29 职场文书
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
师德师风事迹材料
2014/12/20 职场文书
教师党员自我评价2015
2015/03/04 职场文书
名人传读书笔记
2015/06/26 职场文书
2015年评职称个人工作总结
2015/10/15 职场文书
python设置 matplotlib 正确显示中文的四种方式
2021/05/10 Python
Matplotlib绘制混淆矩阵的实现
2021/05/27 Python