python tempfile 学习小结

tempfile 这个模块主要是用来创建临时文件和目录,用完后会自动删除,省的你自己去创建一个文件、使用这个文件、再删除这个过程了。其中比较常用的是TemporaryFile和NamedTemporaryFile,其他觉得简单看看就可以了。

TemporaryFile 创建一个临时文件,关闭时自动删除

In [81]: tmp = tempfile.TemporaryFile()

In [82]: type(tmp)
Out[82]: file

In [83]: tmp.write('I am lee\n')

In [84]: tmp.seek(0)

In [85]: tmp.read()
Out[85]: 'I am lee\n

#调用close()后文件就自动删除了
In [86]: tmp.close()

NamedTemporaryFile 类似于TemporaryFile,创建一个临时文件,可以得到文件名,delete参数决定文件关闭时是否删除

In [89]: tmp = tempfile.NamedTemporaryFile()

#通过name属性可以获取到文件名
In [90]: tmp.name
Out[90]: '/tmp/tmpijT5Aj'

In [91]: os.path.exists(tmp.name)
Out[91]: True

In [92]: tmp.write("I am lee\n")

In [93]: tmp.seek(0)

In [94]: tmp.read()
Out[94]: 'I am lee\n'

#调用close()后文件名被删除了
In [95]: tmp.close()

In [96]: os.path.exists(tmp.name)
Out[96]: False

这两个函数说明文档里都有这么一句:This file-like object can be used in a with statement, just like a normal file.所以也可以配合with使用,省的再处理文件关闭之类的事情了

In [100]: with tempfile.NamedTemporaryFile() as tmp:
   .....:     print tmp.name
   .....:     tmp.write("I am lee\n")
   .....:     tmp.seek(0)
   .....:     print tmp.read()
   .....:     print os.path.exists(tmp.name)
   .....:
/tmp/tmp9U67Og
I am lee

True

#文件已经被删除
In [101]: print os.path.exists(tmp.name)
False

参考资料:

官方tempfile模块:https://docs.python.org/2.7/library/tempfile.html#module-tempfile

Python模块学习——tempfile:http://www.cnblogs.com/captain_jack/archive/2011/01/19/1939555.html

Python 学习笔记:http://wiki.jikexueyuan.com/project/the-python-study-notes-second-edition/files-and-directories.html