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 25 Python
Python爬虫爬验证码实现功能详解
Apr 14 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
Jul 02 Python
Python脚本实现Web漏洞扫描工具
Oct 25 Python
使用Python绘制图表大全总结
Feb 11 Python
Python编程实现线性回归和批量梯度下降法代码实例
Jan 04 Python
PyQt5 对图片进行缩放的实例
Jun 18 Python
python 使用opencv 把视频分割成图片示例
Dec 12 Python
python中68个内置函数的总结与介绍
Feb 24 Python
使用Pyhton 分析酒店针孔摄像头
Mar 04 Python
完美解决jupyter由于无法import新包的问题
May 26 Python
Python类的继承super相关原理解析
Oct 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 处理图片的类实现代码
2009/10/23 PHP
Yii分页用法实例详解
2014/12/04 PHP
php操作xml入门之xml标签的属性分析
2015/01/23 PHP
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
2015/07/06 PHP
动态改变textbox的宽高的js
2006/10/26 Javascript
javascript window.opener的用法分析
2010/04/07 Javascript
javascript 模式设计之工厂模式学习心得
2010/04/27 Javascript
JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解
2010/04/29 Javascript
基于jquery实现状态限定编辑的代码
2012/02/11 Javascript
使用js dom和jquery分别实现简单增删改
2014/09/11 Javascript
jQuery Ajax使用实例
2015/04/16 Javascript
JavaScript实现将xml转换成html table表格的方法
2015/04/17 Javascript
jquery实现多屏多图焦点图切换特效的方法
2015/05/04 Javascript
使用JQuery实现Ctrl+Enter提交表单的方法
2015/10/22 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
2016/04/27 Javascript
vue中渐进过渡效果实现
2016/10/27 Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
2017/01/24 Javascript
实现图片首尾平滑轮播(JS原生方法—节流)
2017/10/17 Javascript
vue.js绑定事件监听器示例【基于v-on事件绑定】
2018/07/07 Javascript
vue实现引入本地json的方法分析
2018/07/12 Javascript
node.js爬取中关村的在线电瓶车信息
2018/11/13 Javascript
微信小程序用canvas画图并分享
2020/03/09 Javascript
基于Electron实现桌面应用开发代码实例
2020/07/07 Javascript
解决Vue大括号字符换行踩的坑
2020/11/09 Javascript
python使用fcntl模块实现程序加锁功能示例
2017/06/23 Python
python实现Windows电脑定时关机
2018/06/20 Python
详解通过API管理或定制开发ECS实例
2018/09/30 Python
python处理document文档保留原样式
2019/09/23 Python
python实现3D地图可视化
2020/03/25 Python
使用keras实现densenet和Xception的模型融合
2020/05/23 Python
英国轻奢珠宝品牌:Astley Clarke
2016/12/18 全球购物
Whittard官方海外旗舰店:英国百年茶叶品牌
2018/02/22 全球购物
无工作经验者个人求职信范文
2013/12/22 职场文书
农民工创业典型事迹
2014/01/25 职场文书
护士自我评价范文
2014/01/25 职场文书