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 相关文章推荐
50行Python代码实现人脸检测功能
Jan 23 Python
python 实现提取某个索引中某个时间段的数据方法
Feb 01 Python
使用Python在Windows下获取USB PID&amp;VID的方法
Jul 02 Python
使用python获取邮箱邮件的设置方法
Sep 20 Python
创建Shapefile文件并写入数据的例子
Nov 26 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
Mar 19 Python
Python计算信息熵实例
Jun 18 Python
matplotlib 画双轴子图无法显示x轴的解决方法
Jul 27 Python
python opencv pytesseract 验证码识别的实现
Aug 28 Python
Django中日期时间型字段进行年月日时分秒分组统计
Nov 27 Python
Python中glob库实现文件名的匹配
Jun 18 Python
python之json文件转xml文件案例讲解
Aug 07 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/08/15 PHP
php 团购折扣计算公式
2011/11/24 PHP
探讨各种PHP字符串函数的总结分析
2013/06/05 PHP
PHP使用递归方式列出当前目录下所有文件的方法
2015/06/02 PHP
php实现连接access数据库并转txt写入的方法
2017/02/08 PHP
php 使用curl模拟ip和来源进行访问的实现方法
2017/05/02 PHP
25个非常棒的jQuery滑块插件和教程小结
2011/09/02 Javascript
当json键为数字时的取值方法解析
2013/11/15 Javascript
js实现网页自动刷新可制作节日倒计时效果
2014/05/27 Javascript
JS实现模拟风力的雪花飘落效果
2015/05/13 Javascript
javascript 继承学习心得总结
2016/03/17 Javascript
详解angular中通过$location获取路径(参数)的写法
2017/03/21 Javascript
详解VUE 定义全局变量的几种实现方式
2017/06/01 Javascript
JS图片轮播与索引变色功能实例详解
2017/07/06 Javascript
vue 怎么创建组件及组件使用方法
2017/07/27 Javascript
JS中promise化微信小程序api
2018/04/12 Javascript
Vue Element UI + OSS实现上传文件功能
2019/07/31 Javascript
基于纯JS实现多张图片的懒加载Lazy过程解析
2019/10/14 Javascript
ES6 Generator基本使用方法示例
2020/06/06 Javascript
[01:08]DOTA2“血战之命”预告片
2017/08/12 DOTA
以Flask为例讲解Python的框架的使用方法
2015/04/29 Python
python生成随机图形验证码详解
2017/11/08 Python
Python 从一个文件中调用另一个文件的类方法
2019/01/10 Python
python实现淘宝秒杀脚本
2020/06/23 Python
使用python判断jpeg图片的完整性实例
2019/06/10 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
2020/07/02 Python
简单整理HTML5的基本特性和语法
2016/02/18 HTML / CSS
英国办公用品商店:Office Outlet
2018/04/04 全球购物
个人简历中的自我评价范例
2013/10/29 职场文书
2015年幼儿教育工作总结
2015/07/24 职场文书
家长对孩子的寒假评语
2015/10/09 职场文书
2016年度先进班组事迹材料
2016/03/01 职场文书
NodeJs内存占用过高的排查实战记录
2021/05/10 NodeJs
python实现剪贴板的操作
2021/07/01 Python
再谈python_tkinter弹出对话框创建
2022/03/20 Python
SpringCloud Function SpEL注入漏洞分析及环境搭建
2022/04/08 Java/Android