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中获取网页状态码的两个方法
Nov 03 Python
Python函数参数类型*、**的区别
Apr 11 Python
Python中的super用法详解
May 28 Python
基于python元祖与字典与集合的粗浅认识
Aug 23 Python
Pycharm设置utf-8自动显示方法
Jan 17 Python
python解析含有重复key的json方法
Jan 22 Python
详解Python locals()的陷阱
Mar 26 Python
python3实现单目标粒子群算法
Nov 14 Python
Python3 把一个列表按指定数目分成多个列表的方式
Dec 25 Python
三个python爬虫项目实例代码
Dec 28 Python
Python3 中sorted() 函数的用法
Mar 24 Python
Python高并发解决方案实现过程详解
Jul 31 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快速url重写 更新版[需php 5.30以上]
2010/04/20 PHP
php jquery 多文件上传简单实例
2013/12/23 PHP
PHP清除数组中所有字符串两端空格的方法
2014/10/20 PHP
php获取url参数方法总结
2014/11/13 PHP
php文件夹的创建与删除方法
2015/01/24 PHP
javascript 进度条 实现代码
2009/07/30 Javascript
IE event.srcElement和FF event.target 功能比较
2010/03/01 Javascript
为超链接加上disabled后的故事
2010/12/10 Javascript
不使用ajax实现无刷新提交表单
2014/12/21 Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
2015/05/06 Javascript
图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
2020/12/13 Javascript
Javascript中浏览器窗口的基本操作总结
2016/08/18 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
2016/12/15 Javascript
BootStrap中的Fontawesome 图标
2017/05/25 Javascript
10个最优秀的Node.js MVC框架
2017/08/24 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
JS实现的文字间歇循环滚动效果完整示例
2018/02/13 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
2018/04/19 Javascript
Vue用v-for给循环标签自身属性添加属性值的方法
2018/10/18 Javascript
Vue Prop属性功能与用法实例详解
2019/02/23 Javascript
基于jquery实现的tab选项卡功能示例【附源码下载】
2019/06/10 jQuery
layer.open提交子页面的form和layedit文本编辑内容的方法
2019/09/27 Javascript
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
[44:33]EG vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[36:20]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.17
2020/12/18 DOTA
Python yield 使用方法浅析
2017/05/20 Python
python实现k-means聚类算法
2018/02/23 Python
python3学生名片管理v2.0版
2018/11/29 Python
一份Java笔试题
2012/02/21 面试题
机械专业个人求职自荐信格式
2013/09/21 职场文书
人力资源部培训专员岗位职责
2014/01/02 职场文书
《最大的“书”》教学反思
2014/02/14 职场文书
幼儿教师2014年度工作总结
2014/12/16 职场文书
导游词范文之颐和园/重庆/云台山
2019/09/10 职场文书
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL
Python Pygame实战之塔防游戏的实现
2022/03/17 Python