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写的Discuz7.2版faq.php注入漏洞工具
Aug 06 Python
Python写的服务监控程序实例
Jan 31 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
Jul 28 Python
Python配置mysql的教程(推荐)
Oct 13 Python
Python简单实现socket信息发送与监听功能示例
Jan 03 Python
Python opencv实现人眼/人脸识别以及实时打码处理
Apr 29 Python
python自动生成model文件过程详解
Nov 02 Python
Python安装whl文件过程图解
Feb 18 Python
Python opencv相机标定实现原理及步骤详解
Apr 09 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
Apr 27 Python
浅谈Selenium+Webdriver 常用的元素定位方式
Jan 13 Python
浅谈Python中的正则表达式
Jun 28 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
discuz图片顺序混乱解决方案
2015/07/29 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
2015/09/25 PHP
PHP 中 Orientation 属性判断上传图片是否需要旋转
2015/10/16 PHP
PHP模版引擎原理、定义与用法实例
2019/03/29 PHP
关于laravel后台模板laravel-admin select框的使用详解
2019/10/03 PHP
Gambit vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
jQuery 名称冲突的解决方法
2011/04/08 Javascript
js 控制图片大小核心讲解
2013/10/09 Javascript
基于jquery插件实现常见的幻灯片效果
2013/11/01 Javascript
Javascript中3个需要注意的运算符
2015/04/02 Javascript
教你使用javascript简单写一个页面模板引擎
2015/05/05 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
2015/05/25 Javascript
JavaScript实现弹出模态窗体并接受传值的方法
2016/02/12 Javascript
url传递的参数值中包含&amp;时,url自动截断问题的解决方法
2016/08/02 Javascript
ES6学习笔记之正则表达式和字符串正则方法分析
2017/04/25 Javascript
vue2.0+vue-dplayer实现hls播放的示例
2018/03/02 Javascript
详解微信小程序input标签正则初体验
2018/08/18 Javascript
react 兄弟组件如何调用对方的方法示例
2018/10/23 Javascript
Node.js中package.json中库的版本号(~和^)
2019/04/02 Javascript
使用Vue生成动态表单
2019/11/26 Javascript
Jquery 获取相同NAME 或者id删除行操作
2020/08/24 jQuery
[00:17]游戏风云独家报道:DD赛后说出数字秘密 吓死你们啊!
2014/07/13 DOTA
python登录pop3邮件服务器接收邮件的方法
2015/04/30 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
Django Admin实现三级联动的示例代码(省市区)
2018/06/22 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
python根据文本生成词云图代码实例
2019/11/15 Python
如何提高python 中for循环的效率
2020/04/15 Python
关于Python不换行输出和不换行输出end=““不显示的问题(亲测已解决)
2020/10/27 Python
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
声明struct x1 { . . . }; 和typedef struct { . . . }x2;有什么不同
2012/06/02 面试题
人事主管岗位职责范本
2013/12/04 职场文书
党员干部承诺书
2014/03/25 职场文书
培训班开班仪式主持词
2014/03/28 职场文书
导游词幽默开场白
2019/06/26 职场文书
Eclipse+Java+Swing+Mysql实现电影购票系统(详细代码)
2022/01/18 Java/Android