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入门篇之条件、循环
Oct 17 Python
python字符串替换的2种方法
Nov 30 Python
python获取当前日期和时间的方法
Apr 30 Python
shelve  用来持久化任意的Python对象实例代码
Oct 12 Python
python thrift搭建服务端和客户端测试程序
Jan 17 Python
python实现机器人行走效果
Jan 29 Python
pyqt5简介及安装方法介绍
Jan 31 Python
对Python 文件夹遍历和文件查找的实例讲解
Apr 26 Python
Python 循环终止语句的三种方法小结
Jun 24 Python
Django 限制访问频率的思路详解
Dec 24 Python
Python 在局部变量域中执行代码
Aug 07 Python
解决PyCharm无法使用lxml库的问题(图解)
Dec 22 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模板引擎Smarty的缓存使用总结
2014/04/24 PHP
PHP将进程作为守护进程的方法
2015/03/19 PHP
PHP中explode函数和split函数的区别小结
2016/08/24 PHP
php中bind_param()函数用法分析
2017/03/28 PHP
PHP使用ActiveMQ实例
2018/02/05 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
插件:检测javascript的内存泄漏
2007/03/04 Javascript
javascript 解析后的xml对象的读取方法细解
2009/07/25 Javascript
JQuery对checkbox操作 (循环获取)
2011/05/20 Javascript
利用jQuery的动画函数animate实现豌豆发射效果
2016/08/28 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
2016/11/23 Javascript
js实现简单的获取验证码按钮效果
2017/03/03 Javascript
正则 js分转元带千分符号详解
2017/03/08 Javascript
详解使用nodeJs安装Vue-cli
2017/05/17 NodeJs
利用JS实现一个同Excel表现的智能填充算法
2018/08/13 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
基于原生js实现九宫格算法代码实例
2020/07/03 Javascript
JS模拟实现京东快递单号查询
2020/11/30 Javascript
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
python实现简易通讯录修改版
2018/03/13 Python
深入浅析Python的类
2018/06/22 Python
python中时间模块的基本使用教程
2019/05/14 Python
浅谈Pandas Series 和 Numpy array中的相同点
2019/06/28 Python
python实现简单图书管理系统
2019/11/22 Python
Origins悦木之源英国官网:雅诗兰黛集团高端植物护肤品牌
2017/11/06 全球购物
如何手工释放资源
2013/12/15 面试题
员工培训邀请函
2014/01/11 职场文书
大学生暑期实践感言
2014/02/26 职场文书
关于感恩的演讲稿800字
2014/08/26 职场文书
秋季运动会广播稿(30篇)
2014/09/13 职场文书
校园主题婚礼活动策划方案
2014/09/15 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
乡镇干部学习心得体会
2016/01/23 职场文书
使用react+redux实现计数器功能及遇到问题
2021/06/02 Javascript
Python实现8种常用抽样方法
2021/06/27 Python